导出视图,擅长剃刀而不失风格

我有一个剃刀视图,我想出口到Excel。

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

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

当我评论这条线时,我可以看到我想要的风格。 当我取消注释并提出要求时,浏览器会要求我下载Excel文件。 但问题是当我打开文件,我得到这个错误

 Missing file c:\scrips\excel.css 

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

那么我怎样才能使文件保存在其布局?

您可能需要创build一个单独的“导出”视图。 这意味着,它是自己的控制器的Action ,和View本身。 该视图将需要与您想要的结果Excel文件的外观相同。 它必须是独立的。 没有布局和一个样式标签,其中包含CSS(样式/脚本/等没有链接)。

这是一个简单的例子:

比方说你有一个名为“家”的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> 

一旦你加载这个页面,它将popup一个下载框,它将在适当的风格的Excel中打开。

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

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