我有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可以轻松地为它提供服务。