ASP.NET MVC剃刀:如何呈现剃刀局部视图的HTML控制器内的行动 [英] ASP.NET MVC Razor: How to render a Razor Partial View's HTML inside the controller action
问题描述
如何生成一个给定的局部视图对ASP.NET视图引擎<一个一个HTML href=\"http://stackoverflow.com/questions/286132/asp-net-mvc-getting-a-partial-views-html-from-inside-of-the-controller\">is众所周知。
但是,如果此功能是在剃刀局部视图中使用它不工作,作为例外,说,局部视图不会从用户控件派生。
如何解决渲染支持剃刀局部视图?
我需要这个,因为我生成的电子邮件成为本部分景色...
更新:
code失败(@mcl):
公共字符串RenderPartialToString(字符串控件名称,对象的ViewData)
{
的ViewPage的ViewPage =新的ViewPage(){ViewContext =新ViewContext()};
viewPage.Url = this.GetUrlHelper(); 字符串fullControlName =〜/查看/电子邮件/+控件名称+的.ascx viewPage.ViewData =新的ViewDataDictionary(可视数据);
viewPage.Controls.Add(viewPage.LoadControl(fullControlName)); StringBuilder的SB =新的StringBuilder();
使用(StringWriter的SW =新的StringWriter(某人))
{
使用(HtmlTextWriter的TW =新的HtmlTextWriter(SW))
{
viewPage.RenderControl(TW);
}
}
返回sb.ToString();
}
@ Html.Partial(nameOfPartial模型)
更新
保护字符串RenderPartialViewToString(字符串的viewName,对象模型)
{
如果(string.IsNullOrEmpty(的viewName))
的viewName = ControllerContext.RouteData.GetRequiredString(行动); ViewData.Model =模型; 使用(StringWriter的SW =新的StringWriter()){
ViewEngineResult的ViewResult = ViewEngines.Engines.FindPartialView(ControllerContext,的viewName);
ViewContext viewContext =新ViewContext(ControllerContext,viewResult.View,ViewData的,TempData的,SW);
viewResult.View.Render(viewContext,SW); 返回sw.GetStringBuilder()的ToString()。
}
}
How to generate a HTML of a given partial view on ASP.NET view engine is known.
But if this functionality is used on razor partial view it does not work, as exception says the partial view does not derive from "UserControl".
How to fix the rendering to support razor partial view?
I need this because I generate emails form this partial views ...
UPDATE:
Code that fails (@mcl):
public string RenderPartialToString(string controlName, object viewData)
{
ViewPage viewPage = new ViewPage() { ViewContext = new ViewContext() };
viewPage.Url = this.GetUrlHelper();
string fullControlName = "~/Views/Email/" + controlName + ".ascx";
viewPage.ViewData = new ViewDataDictionary(viewData);
viewPage.Controls.Add(viewPage.LoadControl(fullControlName));
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
{
using (HtmlTextWriter tw = new HtmlTextWriter(sw))
{
viewPage.RenderControl(tw);
}
}
return sb.ToString();
}
@Html.Partial("nameOfPartial", Model)
Update
protected string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (StringWriter sw = new StringWriter()) {
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
这篇关于ASP.NET MVC剃刀:如何呈现剃刀局部视图的HTML控制器内的行动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!