2011-06-08 45 views
2

我有这样的方法的控制器:ASP.NET MVC 3使用HTML视图模型从

public ActionResult Index() 
{ 
    CustomerInfoViewModel viewModel = CustomerInfoModel.Load(); 
    return View("Report", viewModel); 
} 

现在,我想创建另一个哪个做同样的不止这一个,但返回去HTML方法(字符串)而不是ActionResult。有没有办法获得ActionResult会呈现的HTML或类似的东西?

为什么我需要这个?这是我用HTML显示的报告。但用户可以下载带有报告的PDF。要做到这一点,我使用ABCPdf。我必须建立PDF文件的方法。

  1. 从HTML字符串。 (这就是为什么我想要做我在问什么)。
  2. 来自URL。在这种情况下,服务器启动对该URL的请求(我可以使用上面公布的方法的URL)。问题是这个请求是新的请求,所以我失去了会话信息(在报告中使用)。

任何想法?

谢谢!

回答

2
public ActionResult GetPDF() 
    { 
    // Do your report generation here 
    byte[] Buffer = [Get the rendered pdf file] 
    return File(Buffer, "application/pdf", Server.HtmlEncode("[Report Name]")); 
    } 
+0

@Rajkumar R:问题是生成报告。我可以用HTML(不知道如何从ViewModel获取HTML)做到这一点,或者我通过URL来做到这一点,在这种情况下,我需要一些“魔术”来避免丢失会话信息。 – Diego 2011-06-08 14:10:07

+0

@Diego:我能知道你为什么不使用会话管理和cookie。您可以使用会话对象来存储ViewModel并在随后的请求中检索它以生成PDF。 – atree 2011-06-08 14:21:55

+0

@Rajkumar R:如果我可以在两个请求之间使用会话信息,那么不会有任何问题,因为我可以毫无困难地在第二个请求中生成报告。问题是,如他们是两个不同的请求会话信息是不同的,他们有不同的会话ID。 – Diego 2011-06-08 14:24:41