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(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |