_ViewStart перестает работать после создания бритвы пользовательский вид двигателя - PullRequest
4 голосов
/ 18 декабря 2011

Я создал пользовательский механизм просмотра бритвы, который расширяет RazorViewEngine.Затем внезапно я не могу получить доступ к переменным, которые я определил в _ViewStart.cshtml в папке / Views, которые обычно работают в проекте по умолчанию, инициализированном шаблоном VS2010 MVC3.

Мой вопрос заключается в том, как включить _ViewStartв бритве пользовательского вида движка?

1 Ответ

0 голосов
/ 20 апреля 2013

Не видя ваш код, я не могу точно сказать, что идет не так, но после просмотра источника для 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 показывает, что этот логический параметр используется для создания 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 метода RazorViewEngine и не инициализация RazorView указанным выше способом.
  2. Переопределение метода RenderView RazorView без создания StartPageLookupDelegate и передача его в метод ExecutePageHierarchy.

Надеемсяэто поможет вам найти правильный путь к поиску решения!

...