简体   繁体   English

asp.net mvc 1.0-如何将部分视图呈现为字符串

[英]asp.net mvc 1.0 - how to render a partial view as a string

I need to render a partial view to a string within a controller action. 我需要在控制器动作中为字符串呈现局部视图。 I have the following sample code, but the ControllerContext. 我有以下示例代码,但有ControllerContext。 ParentActionViewContext does not seem to exist in mvc 1.0 在mvc 1.0中似乎不存在ParentActionViewContext

            // Get the IView of the PartialView object.
            var view = PartialView("MyPartialView").View;

            // Initialize a StringWriter for rendering the output.
            var writer = new StringWriter();

            // Do the actual rendering.
            view.Render(ControllerContext.ParentActionViewContext, writer);

Any tips greatly appreciated. 任何提示,不胜感激。

try this MVC v1.0 (an extension method that i use) 试试这个MVC v1.0(我使用的扩展方法)

public static class Extensionmethods
{
    public static string RenderPartialToString(this Controller controller, string partialName)
    {
        return RenderPartialToString(controller, partialName, new object());
    }
    public static string RenderPartialToString(this Controller 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();
    }
}

usage: 用法:

....
string htmlBlock = this.RenderPartialToString("YourPartialView", model);
return htmlBlock;

i use this in a ton of controllers with 100% success... 我在大量的控制器中以100%成功地使用它...

jim 吉姆

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM