简体   繁体   English

在ASP.NET中将完整视图呈现为字符串

[英]Render Full View as String in ASP.NET

I have found this code to render a partial view as a string: 我发现以下代码将部分视图呈现为字符串:

public static string RenderPartialToString(string controlName, object viewData)
    {
        ViewPage viewPage = new ViewPage() { ViewContext = new ViewContext() };

        viewPage.ViewData = new ViewDataDictionary(viewData);
        viewPage.Controls.Add(viewPage.LoadControl(controlName));

        StringBuilder sb = new StringBuilder();
        using (StringWriter sw = new StringWriter(sb))
        {
            using (HtmlTextWriter tw = new HtmlTextWriter(sw))
            {
                viewPage.RenderControl(tw);
            }
        }

        return sb.ToString();
    }

However I need to render a full view as a string (which contains ViewData). 但是,我需要将完整视图呈现为字符串(包含ViewData)。

What is the best way to do this? 做这个的最好方式是什么?

Rendering a full view as string: 将完整视图呈现为字符串:

    private string RenderViewToString(string viewName, object model=null)
    {
        if (string.IsNullOrEmpty(viewName))
            viewName = ControllerContext.RouteData.GetRequiredString("action");

        if (model != null)
            ViewData.Model = model;

        // you can pass in additional arguments to this function 
        // and manipulate the ViewData further if you need to

        using (var sw = new StringWriter())
        {
            var viewResult = ViewEngines.Engines.FindView(ControllerContext, viewName, null);
            var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
            viewResult.View.Render(viewContext, sw);

            return sw.GetStringBuilder().ToString();
        }
    }

Use like this, if you want to render a page without model: 如果要渲染不带模型的页面,请使用以下方法:

var text = RenderViewToString("Index");

and like this, if you want to render a page with a model 就像这样,如果您想模型渲染页面

var text = RenderViewToString("OtherPage", model);

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

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