当 ASP.NET MVC 执行包含 Razor 的页面时,它将首先运行主体,例如 RenderBody
方法,然后运行布局代码并将它们编织在一起。
这记录在这个 blog post 中:
System.Web.Mvc.RazorView.RenderView() System.Web.WebPages.WebPageBase.ExecutePageHierarchy() //non virtual version System.Web.WebPages.WebPageBase.PushContext()
System.Web.WebPages.WebPageBase.ExecutePageHierarchy() //virtual version this.Execute() //Generated code from our View
System.Web.WebPages.WebPageBase.PopContext
RenderSurrounding(virtualPath, body); //Render Layout, which is similar to View's rendering process, essentially you can have nested Layout VerifyRenderdBodyOrSetions();
我想将代码添加到我的 View 和布局中,以跟踪页面中的实际 逻辑位置。
有没有办法连接一个方法来刚好在 RenderSurrounding 和刚好在 RenderBody
完成执行?
最佳答案
您可以覆盖 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
中为每个目录设置基本类型.
关于c# - 在布局执行和后期主体渲染之前,ASP.NET MVC 中是否有 Hook ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9303380/