从剃刀视图获取字符串的最佳方法
问题描述:
我想让我的Razor View返回它呈现的html字符串,以便控制器将从视图返回呈现的html字符串,而不仅仅是视图。在ASP.NET MVC中没有本地方法可以执行此操作。有没有解决这个问题的方法?从剃刀视图获取字符串的最佳方法
通过说明性举例:
public ActionResult Index()
{
return View().ToString; //View has no ToString() method but this is what I am trying to do
}
答
您可以使用Html.Partial
返回该视图的MvcHtmlString
。
您可以在System.Web.Mvc.Html.PartialExtensions
找到Partial
方法。
这里有一个关于此方法的详细信息: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());
你介意如何在控制器中使用它来简单输出视图生成的html字符串(我修改了我的问题)。 – Judo 2012-04-12 10:42:59
请看我的更新@Judo – 2012-04-12 10:50:21