创建剃刀自定义视图引擎后_ViewStart停止工作

时间:2011-12-18 14:41:03

标签: asp.net-mvc razor

我创建了一个扩展RazorViewEngine的剃刀自定义视图引擎。然后我突然无法访问我在/ Views文件夹中_ViewStart.cshtml中定义的变量,这些变量通常适用于由VS2010 MVC3模板初始化的默认项目。

我的问题是如何在剃须刀自定义视图引擎中启用_ViewStart?

1 个答案:

答案 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);

所以这意味着你可能会做以下两件事之一:

  1. 覆盖CreateView的{​​{1}}方法,而不是按照上面列出的方式初始化RazorViewEngine
  2. 覆盖RazorView的{​​{1}}方法而不创建RenderView并将其传递到RazorView方法。
  3. 希望这有助于您找到寻找解决方案的正确途径!