在布局执行和发布正文之前,ASP.NET MVC中是否存在挂钩?

Sam*_*ron 8 c# razor asp.net-mvc-3

当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()//从我们的View
System.Web.WebPages.WebPageBase.PopContext
RenderSurrounding(virtualPath,body)生成的代码; //渲染布局,类似于View的渲染过程,基本上你可以有嵌套的Layout VerifyRenderdBodyOrSetions();

我想在我的视图和布局中添加代码,以跟踪页面中的实际逻辑位置.

有没有办法可以 RenderSurrounding 之前 RenderBody完成执行之后连接一个方法来运行?

Pau*_*yng 5

您可以通过为ExecutePageHierarchy页面创建不同的基本类型来覆盖页面本身的方法,给定如下WebViewPage实现:

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

您将在实际页面内容之前和之后(因此在布局内)获得输出.我不确定那些你在寻找什么,你是不是想在</body>我想象中编写脚本?

主要是使用这种基本类型只用于主.cshtml(不是任何部分或布局)它将Output.Write围绕RenderBody布局的输出呈现那些(实际上,就在内部).

您可以在中设置每个目录的基本类型web.config.