如何将ASP.NET MVC视图呈现为字符串?
我想输出两个不同的视图(一个作为将作为电子邮件发送的字符串),另一个显示给用户的页面。
这是否可以在ASP.NET MVC beta中使用?
我尝试过多个例子:
1. ASP.NET MVC Beta中的RenderPartial到String
如果我使用此示例,则会收到“在HTTP标头发送后无法重定向”。
如果我使用它,我似乎无法执行redirectToAction,因为它尝试渲染可能不存在的视图。如果我确实返回了视图,那么它完全搞砸了,看起来根本不正确。
有没有人对我遇到的这些问题有任何想法/解决方案,或者对更好的问题有任何建议?
非常感谢!
以下是一个例子。我要做的是创建GetViewForEmail方法:
public ActionResult OrderResult(string ref){ //Get the order Order order = OrderService.GetOrder(ref); //The email helper would do the meat and veg by getting the view as a string //Pass the control name (OrderResultEmail) and the model (order) string emailView = GetViewForEmail("OrderResultEmail", order); //Email the order out EmailHelper(order, emailView); return View("OrderResult", order);}
Tim Scott接受的答案(由我改变并格式化):
public virtual string RenderViewToString( ControllerContext controllerContext, string viewPath, string masterPath, ViewDataDictionary viewData, TempDataDictionary tempData){ Stream filter = null; ViewPage viewPage = new ViewPage(); //Right, create our view viewPage.ViewContext = new ViewContext(controllerContext, new WebFormView(viewPath, masterPath), viewData, tempData); //Get the response context, flush it and get the response filter. var response = viewPage.ViewContext.HttpContext.Response; response.Flush(); var oldFilter = response.Filter; try { //Put a new filter into the response filter = new MemoryStream(); response.Filter = filter; //Now render the view into the memorystream and flush the response viewPage.ViewContext.View.Render(viewPage.ViewContext, viewPage.ViewContext.HttpContext.Response.Output); response.Flush(); //Now read the rendered view. filter.Position = 0; var reader = new StreamReader(filter, response.ContentEncoding); return reader.ReadToEnd(); }
宝慕林4294392