Есть ли в ASP.NET MVC хуки перед выполнением макета и рендерингом тела сообщения? - PullRequest
8 голосов
/ 16 февраля 2012

Когда ASP.NET MVC выполняет страницу, содержащую Razor, он сначала запускает тело, например, метод RenderBody, затем запускает код для макета и объединяет его.

Это задокументировано в этом блоге :

System.Web.Mvc.RazorView.RenderView () System.Web.WebPages.WebPageBase.ExecutePageHierarchy () // не виртуальный версия System.Web.WebPages.WebPageBase.PushContext ()
System.Web.WebPages.WebPageBase.ExecutePageHierarchy () // virtual version this.Execute () // Сгенерированный код из нашего представления
System.Web.WebPages.WebPageBase.PopContext
RenderSurrounding (virtualPath, body); // Визуализация макета, который похож на процесс рендеринга View, по сути, вы можете вкладывать Layout VerifyRenderdBodyOrSetions ();

Я хочу добавить в мои представления и макет код, который отслеживает фактическую логическую позицию на странице.

Есть ли способ, которым я могу подключить метод для запуска непосредственно перед RenderSurrounding и сразу после завершения RenderBody?

1 Ответ

5 голосов
/ 16 февраля 2012

Вы можете переопределить метод ExecutePageHierarchy на самой странице, создав другой базовый тип для своих страниц, с учетом реализации WebViewPage, подобной этой:

public abstract class CustomViewPage<TModel> : WebViewPage<TModel>
{
    public override void ExecutePageHierarchy()
    {
        Output.Write("Before");
        base.ExecutePageHierarchy();
        Output.Write("After");
    }
}

Вы получите вывод непосредственно до и после фактического содержимого страницы (и, следовательно, внутри макета). Я не уверен, что это то, что вы ищете, вы пытаетесь просто написать сценарии на </body> Я представляю?

Главное, чтобы этот тип базового типа использовался только для основного .cshtml (не для каких-либо частичных или в макете), он будет отображать эти Output.Write вокруг вывода RenderBody макета (ну, на самом деле , только внутри).

Вы можете установить базовый тип для каждого каталога в web.config.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...