2012-04-12 81 views
0

我想让我的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 
     } 

回答

3

您可以使用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()); 
+0

你介意如何在控制器中使用它来简单输出视图生成的html字符串(我修改了我的问题)。 – Judo 2012-04-12 10:42:59

+0

请看我的更新@Judo – 2012-04-12 10:50:21