C# 在布局执行和后期主体渲染之前,ASP.NET MVC中是否有挂钩?
当ASP.NET MVC执行包含Razor的页面时,它将首先运行主体,例如C# 在布局执行和后期主体渲染之前,ASP.NET MVC中是否有挂钩?,c#,asp.net-mvc-3,razor,C#,Asp.net Mvc 3,Razor,当ASP.NET MVC执行包含Razor的页面时,它将首先运行主体,例如RenderBody方法,然后运行布局的代码并将其编织在一起 这记录在以下文件中: System.Web.Mvc.RazorView.RenderView() System.Web.WebPages.WebPageBase.ExecutePageHierarchy()//非虚拟 版本System.Web.WebPages.WebPageBase.PushContext() System.Web.WebPages.WebPa
RenderBody
方法,然后运行布局的代码并将其编织在一起
这记录在以下文件中:
System.Web.Mvc.RazorView.RenderView()
System.Web.WebPages.WebPageBase.ExecutePageHierarchy()//非虚拟
版本System.Web.WebPages.WebPageBase.PushContext()System.Web.WebPages.WebPageBase.ExecutePageHierarchy()//虚拟 version this.Execute()//从我们的视图生成的代码
System.Web.WebPages.WebPageBase.PopContext
渲染周围环境(虚拟路径,主体)//渲染布局,即 与视图的渲染过程类似,本质上可以使用嵌套 布局验证RenderBodyOrSetions() 我想在视图和布局中添加跟踪页面中实际逻辑位置的代码
是否有一种方法可以连接一个方法,以便在渲染器环绕之前运行,在执行完之后运行
RenderBody
您可以通过为页面创建不同的基本类型来覆盖页面本身上的ExecutePageHierarchy
方法,给定WebViewPage
实现如下:
public abstract class CustomViewPage<TModel> : WebViewPage<TModel>
{
public override void ExecutePageHierarchy()
{
Output.Write("Before");
base.ExecutePageHierarchy();
Output.Write("After");
}
}
公共抽象类CustomViewPage:WebViewPage
{
公共覆盖无效ExecutePageHierarchy()
{
输出。写入(“之前”);
base.ExecutePageHierarchy();
输出。写入(“之后”);
}
}
您将在实际页面内容之前和之后获得输出(因此在布局内部)。我不确定这是否就是你想要的,你是想在
写脚本吗
主要的事情是只对main.cshtml(不是任何部分或布局)使用这种基本类型,它将呈现那些输出。围绕布局的RenderBody
输出编写s(实际上,就是在内部)
您可以在web.config
RenderBody
中设置每个目录的基本类型,它由布局调用(至少在我处理过的两个MVC项目中)。您可以将rendersorounding
包装到帮助器中(如果还没有)在布局中调用RenderBody
之前和之后添加它。@M.Babcock理想情况下,我在框架中寻找一个不涉及布局更改的钩子,但你的问题是:我想在视图和布局中添加跟踪页面中实际逻辑位置的代码。那么,你不想改变布局吗?@M.Babcock做得不好解释我自己看:我想自动连接MarkLayoutStart和MarkLayoutBodyRendered,而不编辑我的主布局你有没有想过只编写自己的从RazorView
继承的基本页面?看见