从Razor视图获取字符串的最佳方法

时间:2012-04-12 10:16:12

标签: asp.net-mvc razor

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

1 个答案:

答案 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());