Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在布局执行和后期主体渲染之前,ASP.NET MVC中是否有挂钩?_C#_Asp.net Mvc 3_Razor - Fatal编程技术网

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

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

当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()//虚拟 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
继承的基本页面?看见