使用剃刀将视图导出为ex​​cel而不会丢失样式

时间:2012-09-11 22:41:10

标签: asp.net-mvc-3 excel razor

我有一个剃刀视图,我想导出到excel。

我在我看来使用这一行来做到这一点:

Response.AddHeader("Content-Type", "application/vnd.ms-excel");    

当我评论这一行时,我可以看到具有我想要的风格的视图。当我取消注释并要求它时,浏览器会要求我按照它应该下载Excel文件。但问题是当我打开文件时,我收到此错误

Missing file c:\scrips\excel.css

这是我用来显示页面的CSS。

那么如何使文件以其布局保存?

2 个答案:

答案 0 :(得分:16)

您可能需要创建单独的“导出”视图。这意味着,它自己的控制器ActionView本身。视图需要与生成的Excel文件的外观相同。它必须是独立的。没有布局,以及保存css的样式标记(没有样式/脚本/等的链接)。

这是一个简单的例子:

假设您有一个名为“Home”的Controller

HomeController内的

行动

public ActionResult Export()
{
    Response.AddHeader("Content-Type", "application/vnd.ms-excel");
    return View();
}

查看(Home \ Export.cshtml):

@{
    Layout = "";
}
<style type="text/css">
    body {font-family: Tahoma;}
    h2 {color:red}
    table {border:1px solid black; border-spacing:0}
    td {color:green; font-size:.8em; padding:5px}
    .heading {background:#ccc}
</style>

<h2>Test</h2>

<table>
    <tr class="heading">
        <th>Name</th>
        <th>Age</th>
    </tr>
    <tr>
        <td>Test1</td>
        <td>15</td>
    </tr>
    <tr>
        <td>Test2</td>
        <td>16</td>
    </tr>
</table>

加载此页面后,会弹出一个下载框,并在excel中以适当的样式打开。

答案 1 :(得分:1)

您的控制器应该有一个实际上为Excel文件提供服务的操作,而不是包含Excel文件的网页。控制器动作应该是类似的。

public ActionResult Export()
{
    byte[] doc = GetExcelFileSomehow();
    var file = File(doc, "application/vnd.ms-excel");
    file.FileDownloadName = "MyFile.xlsx";
    return file;
}