2013-02-22 43 views
1

这里是我的代码:如何提供模型来查看?

 [HttpGet] 
     public FileContentResult GetCalenderView() 
     { 
      StringWriter sw = new StringWriter(); 
      ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(this.ControllerContext, "GetCalenderView"); 
      ViewContext viewContext = new ViewContext(this.ControllerContext, viewResult.View, this.ViewData, this.TempData, sw); 
      viewResult.View.Render(viewContext, sw); 

      var stringResult = sw.GetStringBuilder().ToString(); 

      byte[] byteArray = Encoding.ASCII.GetBytes(stringResult); 

      return File(byteArray, "application/octet-stream", "Month.xls"); 
     } 

我发现这个在线。 这是做什么,给我的字符串格式的视图,我把它作为一个Excel文件发送。 这是一个强类型的视图。

我的问题是,我该如何为此视图提供模型?

+0

您返回查看,而不是一个文件呢? – Freeman 2013-02-22 16:04:50

+0

Noooooooooooooo ..我想要返回一个文件,但该视图需要模型数据。如何提供模型数据以查看? – 2013-02-22 16:05:41

+3

您不能从相同的操作方法返回视图和文件。所以我们需要知道你想要返回给用户的实际数据 - 文件还是HTML内容?如果两者都是,那么我们可以更好地想出一个解决方案,例如可能需要JavaScript。 – 2013-02-22 16:06:16

回答

3

设置您传递的ViewData的的Model财产。

[HttpGet] 
    public FileContentResult GetCalenderView() 
    { 
     var viewData = ViewData; // Ideally copy this or make a fake of it 
     viewData.Model = new object(); // Make this the model you want to pass in 

     StringWriter sw = new StringWriter(); 
     ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(this.ControllerContext, "GetCalenderView"); 
     // Note that we're passing in viewData instead of ViewData 
     ViewContext viewContext = new ViewContext(this.ControllerContext, viewResult.View, viewData, this.TempData, sw); 
     viewResult.View.Render(viewContext, sw); 

     var stringResult = sw.GetStringBuilder().ToString(); 

     byte[] byteArray = Encoding.ASCII.GetBytes(stringResult); 

     return File(byteArray, "application/octet-stream", "Month.xls"); 
    } 
+0

有趣的方法。将把它放在我的实用带上供将来使用。 – 2013-02-22 16:11:18

+0

太棒了!谢谢 :) – 2013-02-22 16:19:34