我想让我的Razor View返回它呈现的html字符串,以便控制器从View中返回渲染的html字符串而不仅仅是视图。我没有在ASP.NET MVC中找到的本机方法来执行此操作。有没有解决方法呢?
作为说明性示例:
public ActionResult Index()
{
return View().ToString; //View has no ToString() method but this is what I am trying to do
}
答案 0 :(得分:3)
您可以使用Html.Partial
返回视图的MvcHtmlString
。
您可以在Partial
中找到System.Web.Mvc.Html.PartialExtensions
方法。
此处提供了有关此方法的更多信息:http://msdn.microsoft.com/en-us/library/ee402898.aspx
我个人将此用于我的RenderPartials(复数)扩展方法:
public static void RenderPartials<T>(this HtmlHelper helper,
string partialViewName, IEnumerable<T> models, string htmlFormat)
{
if (models == null)
return;
foreach (var view in models.Select(model =>
helper.Partial(partialViewName,model, helper.ViewData)))
{
helper.ViewContext.HttpContext.Response
.Output.Write(htmlFormat, view);
}
}
<强>更新强>
要将视图渲染到控制器中的字符串,您可以执行类似的操作(尽管看起来有点像黑客):
var htmlHelper = new HtmlHelper(new ViewContext(), new ViewPage());
var viewString = htmlHelper.Partial("PartialViewName");
我说它有点像黑客的原因是因为HtmlHelper旨在用于你的视图而不是你的控制器或模型中。话虽这么说,如果它有效,并且没有替代字符串化解析后的视图,那么它可能对您有用。
鉴于对你的问题的修改,你正在寻找这样的事情:
public string Index()
{
var htmlHelper = new HtmlHelper(new ViewContext(), new ViewPage());
return htmlHelper.Partial("PartialViewName");
}
如果上面的代码没有正确创建htmlHelper,你可以改为创建它:
TextWriter writer = new StringWriter();
var htmlHelper = new HtmlHelper(new ViewContext(ControllerContext,
new RazorView(ControllerContext, "","",true,null),
new ViewDataDictionary(),
new TempDataDictionary(), writer), new ViewPage());