9

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

在我看来,我正在使用这条线来做到这一点:

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

当我评论这一行时,我可以看到具有我想要的样式的视图。当我取消注释并要求它时,浏览器会要求我下载 Excel 文件。但问题是当我打开文件时,我得到了这个错误

Missing file c:\scrips\excel.css

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

那么如何使文件与其布局一起保存?

4

2 回答 2

15

您可能需要创建一个单独的“导出”视图。这意味着,它是自己的控制器Action,也是View它自己。该视图需要与您希望生成的 Excel 文件的外观相同。它必须是独立的。没有布局,以及包含 CSS 的样式标签(没有样式/脚本/等的链接)。

这是一个简单的例子:

假设您有一个Controller名为“家”。

内部动作HomeController

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

查看(主页\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 中打开。

于 2012-09-12T01:25:32.780 回答
1

您的控制器应该有一个实际提供 Excel 文件的操作,而不是包含 Excel 文件的网页。控制器动作应该是这样的。

public ActionResult Export()
{
    byte[] doc = GetExcelFileSomehow();
    var file = File(doc, "application/vnd.ms-excel");
    file.FileDownloadName = "MyFile.xlsx";
    return file;
}
于 2012-09-12T01:57:58.910 回答