加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – MVC 6 Controller中的ControllerContext和ViewEngines属性

发布时间:2020-12-15 07:38:59 所属栏目:百科 来源:网络整理
导读:我创建了一个新的MVC6项目,并建立了一个新的网站.目标是获得一个视图的渲染结果.我发现以下代码,但是我无法找到它,因为我找不到ControllerContext和ViewEngines. 这是我要重写的代码: protected string RenderPartialViewToString(string viewName,object m
我创建了一个新的MVC6项目,并建立了一个新的网站.目标是获得一个视图的渲染结果.我发现以下代码,但是我无法找到它,因为我找不到ControllerContext和ViewEngines.

这是我要重写的代码:

protected string RenderPartialViewToString(string viewName,object model)
    {
        if (string.IsNullOrEmpty(viewName))
            viewName = ControllerContext.RouteData.GetRequiredString("action");

        ViewData.Model = model;

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

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

解决方法

ControllerContext

首先我应该提到一个控制器不再是一个顶级的上下文,一个动作就是.所以你可以用ActionContext替代ControllerContext

ViewEngines

这是事情有点尴尬!我不完全确定如何获得视觉引擎,但新的DI框架已经添加了一个可以为您完成此工作的CompositeViewEngine的引用.例如:

var engine = Resolver.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;

所以把这一切放在一起,这应该适合你:

protected string RenderPartialViewToString(string viewName,object model)
{
    if (string.IsNullOrEmpty(viewName))
        viewName = ActionContext.ActionDescriptor.Name;

    ViewData.Model = model;

    using (StringWriter sw = new StringWriter())
    {
        var engine = Resolver.GetService(typeof(ICompositeViewEngine))
            as ICompositeViewEngine;
        ViewEngineResult viewResult = engine.FindPartialView(ActionContext,viewName);

        ViewContext viewContext = new ViewContext(
            ActionContext,sw,new HtmlHelperOptions() //Added this parameter in
        );

        //Everything is async now!
        var t = viewResult.View.RenderAsync(viewContext);
        t.Wait();

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读