如何在ASP.NET视图引擎is known上生成给定部分视图的超文本标记语言。
但如果在剃刀部分视图上使用此功能,它将不起作用,因为exception表示部分视图不是从"UserControl“派生的。
如何修复渲染以支持razor局部视图?
我需要这个,因为我从这个局部视图中生成电子邮件...
更新:
失败的代码(@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();
}
发布于 2010-12-03 18:27:18
@Html.Partial("nameOfPartial", Model)
更新
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();
}
}
发布于 2013-05-09 13:07:45
虽然已经给出了足够的答案,但我想提出一个不太冗长的解决方案,它可以在没有MVC控制器类中可用的帮助器方法的情况下使用。通过使用名为"RazorEngine“的第三方库,您可以使用.Net文件IO来获取剃刀文件的内容,并调用
string html = Razor.Parse(razorViewContentString, modelObject);
获取第三方库here。
https://stackoverflow.com/questions/4344533
复制相似问题