是否有一种简单的方法可以将视图或部分视图的输出捕获为字符串?
答案 0 :(得分:3)
对于局部视图,没问题:
public static class ExtensionMethods
{
public static string RenderPartialToString(this ControllerBase controller, string partialName, object model)
{
var vd = new ViewDataDictionary(controller.ViewData);
var vp = new ViewPage
{
ViewData = vd,
ViewContext = new ViewContext(),
Url = new UrlHelper(controller.ControllerContext.RequestContext)
};
ViewEngineResult result = ViewEngines
.Engines
.FindPartialView(controller.ControllerContext, partialName);
if (result.View == null)
{
throw new InvalidOperationException(
string.Format("The partial view '{0}' could not be found", partialName));
}
var partialPath = ((WebFormView)result.View).ViewPath;
vp.ViewData.Model = model;
Control control = vp.LoadControl(partialPath);
vp.Controls.Add(control);
var sb = new StringBuilder();
using (var sw = new StringWriter(sb))
{
using (var tw = new HtmlTextWriter(sw))
{
vp.RenderControl(tw);
}
}
return sb.ToString();
}
}
在控制器中使用:
public string GetLocationHighlites()
{
// get the model from the repository etc..
return this.RenderPartialToString("PartialViewName", model);
}
不确定'普通'视图的用法,因为它不会调用vp.LoadControl()部分。但是,我确信有人会使用“正常”视图执行相同操作所需的类似代码。
希望这个部分视图可以帮助你。
吉姆
答案 1 :(得分:0)
有很多与你有关的问题。值得注意的是,Render a view as a string符合您的要求。