在mvc 2中将视图渲染为字符串

时间:2010-04-14 09:22:13

标签: c# asp.net-mvc

是否有一种简单的方法可以将视图或部分视图的输出捕获为字符串?

2 个答案:

答案 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符合您的要求。