在ASP.NET 5类库中将Razor视图渲染为字符串

时间:2016-06-01 09:53:22

标签: asp.net asp.net-mvc asp.net-core asp.net-core-mvc

我有ASP.NET 4.6 Web-Forms和ASP.NET Core网站。并且有一个类库项目,在它们之间共享。我的目的是将主页面相关的东西包含在驻留在类库中的视图组件中。

我在类库中创建了主页面View Component,并成功地将其调用到ASP.NET Core网站的共享_Layout视图中。以下是我关注的博客。

Reusing External View Components

我的下一个任务是以某种方式将主页View Component的展平HTML从类库中移植到ASP.NET 4.6 Web表单中。我阅读了几个堆栈溢出问题,并遇到了以下一个问题,它展示了如何在ASP.NET Core中将Razor View渲染为字符串。

Render Razor View to string in ASP.NET Core

以下是答案中的代码片段,我可以确认,只要我将此代码放在ASP.NET Core的Controller类中,它就可以正常工作。

        public 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, viewResult.View, 
                ViewData, TempData, sw, new HtmlHelperOptions());

                var t = viewResult.View.RenderAsync(viewContext);
                t.Wait();

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

我的计划是将此代码移动到类库项目中。但是,如果您看到依赖项,则需要Resolver(IServiceProvider),它是基类中可用的公共属性(Microsoft.AspNet.Mvc.Controller)。

我的问题是如何将解析器或Razor View引擎从ASP.NET Core注入到类库项目中。因此,当ASP.NET 4.6 Web-Forms请求View Component的展平HTML时,Class Library可以轻松地为它提供服务。

0 个答案:

没有答案