如何将renderview函数创建为静态函数

本文关键字:创建 静态函数 函数 renderview | 更新日期: 2023-09-27 18:27:24

我想使用renderview函数作为静态函数,我需要做什么?

公共静态字符串RenderView(字符串viewName,对象模型)

public string RenderView(string viewName, object model)
                {
                    ViewData.Model = model;
                    using (var sw = new StringWriter())
                    {
                        var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext,
                                                                                 viewName);
                        var viewContext = new ViewContext(ControllerContext, viewResult.View,
                                                     ViewData, TempData, sw);
                        viewResult.View.Render(viewContext, sw);
                        viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
                        return sw.GetStringBuilder().ToString();
                    }
                }

如何将renderview函数创建为静态函数

您可以创建类似的静态函数

public static class Util
{
    public static string RenderView(string viewName, object model)
    {
        ViewData.Model = model;
        using (var sw = new StringWriter())
        {
            var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext,
                                                                        viewName);
            var viewContext = new ViewContext(ControllerContext, viewResult.View,
                                            ViewData, TempData, sw);
            viewResult.View.Render(viewContext, sw);
            viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
            return sw.GetStringBuilder().ToString();
        }
    }
}

然后你可以这样调用这个函数:Util.RenderView("_viewName",Model)

您可以将Controller本身注入静态方法,并从Controller访问所有属性,如ControllerContext、ViewData、TempData。

调用将是这样的(这是控制器对象)

RenderView(this, "_viewName", model)

静态方法如下所示:

public static string RenderView(ControllerBase controller,
    string viewName,
    object model)
{
    controller.ViewData.Model = model;
    using (var sw = new StringWriter())
    {
        var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext,
                                                                    viewName);
        var viewContext = new ViewContext(controller.ControllerContext, viewResult.View,
                                        controller.ViewData, controller.TempData, sw);
        viewResult.View.Render(viewContext, sw);
        viewResult.ViewEngine.ReleaseView(controller.ControllerContext, viewResult.View);
        return sw.GetStringBuilder().ToString();
    }
}