我创建了一个扩展RazorViewEngine的剃刀自定义视图引擎。然后我突然无法访问我在/ Views文件夹中_ViewStart.cshtml中定义的变量,这些变量通常适用于由VS2010 MVC3模板初始化的默认项目。
我的问题是如何在剃须刀自定义视图引擎中启用_ViewStart?
答案 0 :(得分:0)
在没有看到你的代码的情况下,我无法明确说明出现了什么问题,但在查看the source之后我认为RazorViewEngine
可能知道你没有做什么。
这就是CreateView
方法的样子:
protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
{
var view = new RazorView(controllerContext, viewPath,
layoutPath: masterPath, runViewStartPages: true, viewStartFileExtensions: FileExtensions, viewPageActivator: ViewPageActivator)
{
DisplayModeProvider = DisplayModeProvider
};
return view;
}
您可以看到它们在true
构造函数的runViewStartPages
参数中传递RazorView
的值。查看RenderView
类中RazorView
方法的the source显示此布尔参数用于创建负责查找StartPageLookupDelegate
文件的_ViewStart
并将其编译到执行层次结构中。
WebPageRenderingBase startPage = null;
if (RunViewStartPages)
{
startPage = StartPageLookup(webViewPage, RazorViewEngine.ViewStartFileName, ViewStartFileExtensions);
}
webViewPage.ExecutePageHierarchy(new WebPageContext(context: viewContext.HttpContext, page: null, model: null), writer, startPage);
所以这意味着你可能会做以下两件事之一:
CreateView
的{{1}}方法,而不是按照上面列出的方式初始化RazorViewEngine
。RazorView
的{{1}}方法而不创建RenderView
并将其传递到RazorView
方法。希望这有助于您找到寻找解决方案的正确途径!