相关疑难解决方法(0)

Razor Generator:如何使用库中编译的视图作为主mvc项目中定义的master的局部视图

我们有一个ASP.NET MVC 4应用程序,其中包含大约3000个视图.我们决定将这组视图拆分为单独的DLL,并使用RazorGenerator进行编译.我们只在主MVC项目中保留主_Layout.cshtml和相关文件.

我们无法将DLL中的部分视图与主MVC项目中的主视图一起加载.详细说明如下.

已经做了什么:

  1. 视图成功编译成DLL(我已经确认它们在二进制文件中)

  2. 使用Global.asax.cs中Application_Start中的以下代码为包含视图的每个DLL创建并注册PrecompiledMvc​​Engine对象:

.

foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
    // ...
    // some code determining whether we've got an assembly with views
    // ...

    var engine = new PrecompiledMvcEngine(assembly);
    engine.UsePhysicalViewsIfNewer = true;

    ViewEngines.Engines.Insert(0, engine);

    // StartPage lookups are done by WebPages. 
    VirtualPathFactoryManager.RegisterVirtualPathFactory(engine);
}
Run Code Online (Sandbox Code Playgroud)

什么行不通:

我无法在其中一个库(比如Partial.cshtml)中定义部分视图的情况下加载主MVC项目中定义的视图(例如_Layout.cshtml).我在控制器的操作中使用以下代码告诉MVC框架我请求了哪个视图:

var view = "~/Views/" + partialName + ".cshtml";    
return View(view, "~/Views/Shared/_Layout.cshtml", model);
Run Code Online (Sandbox Code Playgroud)

错误消息显示:未找到视图'〜/ Views/Partial.cshtml'或其主节点,或者没有视图引擎支持搜索的位置.搜索了以下位置:〜/ Views/Partial.cshtml~/Views/Shared/_Layout.cshtml

当我尝试通过指定以下任一项来单独加载视图时:

return View("~/Views/Shared/_Layout.cshtml", model);
Run Code Online (Sandbox Code Playgroud)

要么

return View(view, model);
Run Code Online (Sandbox Code Playgroud)

,找到了正确的观点.但是我需要将它们装在一起.当我在主MVC项目中拥有所有必需的.cshtml文件时,代码可以正常工作.

请注意,已编译的DLL中的视图具有PageVirtualPathAttribute,其路径与控制器操作中指定的路径相同,例如:

namespace SomeBaseNamespace.Views
{
    [GeneratedCode("RazorGenerator", "1.5.0.0"), …
Run Code Online (Sandbox Code Playgroud)

viewengine razor asp.net-mvc-4 razorgenerator

10
推荐指数
1
解决办法
8206
查看次数

标签 统计

asp.net-mvc-4 ×1

razor ×1

razorgenerator ×1

viewengine ×1