c# - 在布局执行和后期主体渲染之前,ASP.NET MVC 中是否有 Hook ?

标签 c# asp.net-mvc-3 razor

当 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.WriteRenderBody 附近布局的输出(真的,就在里面)。

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

关于c# - 在布局执行和后期主体渲染之前,ASP.NET MVC 中是否有 Hook ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9303380/

相关文章:

c# - 用于将数据与文件系统路径相关联的高效数据结构?

c# FileInfo exists 为文件的网络路径返回 false

c# - 使用 LINQ 从列表中随机选择一个匹配的字符串

c# - MVC 3 - Controller 和 ViewModels - 哪个应该包含大部分业务逻辑?

asp.net-mvc-3 - 从局部 View 向布局页面添加js和css文件

c# - DataItem=null on binding,找不到原因?

.net - razor 中的嵌套 for 循环

asp.net-mvc-3 - 模拟 Request.QueryString 用于单元测试并针对 View 进行断言

javascript - 与 .net C# razor 模板进行 react

jquery - 使用 cshtml 中返回的 JQuery FOREACH 行切换可见性