从内联代码调用原始Page_Load函数

时间:2011-07-07 14:40:38

标签: .net asp.net code-behind inline-code

我喜欢Monkey修补ASPX网站,以便我可以在编译的程序集中添加内容到Page_Load方法。

我的第一个想法是将包含第二个Page_Load方法的脚本标记添加到ASPX文件中,如下所示:

<script language="CS" runat="server">
void Page_Load(object sender, System.EventArgs e) 
{
     // do some stuff in addition to the original Page_Load method
}
</script>

但看起来只有内联代码中的Page_Load方法才会执行,而不是原始代码隐藏文件中的那个(在编译的程序集中)。

是否可以从我的内联代码中调用原始方法?或者是否有任何其他方法可以添加在内联代码中调用Page_Load方法后直接运行而不修改现有程序集的内容?

4 个答案:

答案 0 :(得分:10)

asp.net模型是.aspx文件中声明的页面实际上是继承自.aspx.cs文件中声明的System.Web.UI.Page的类的后代类。

因此,调用了您的Page_Load方法,因为它基本上隐藏了原始的Page_Load方法。按照这个逻辑,你可以这样做:

<script language="CS" runat="server"> 
void Page_Load(object sender, System.EventArgs e)  
{      
   base.Page_Load(sender, e);
   // do some stuff in addition to the original Page_Load method 
} 
</script> 

没有可访问性问题,因为asp.net默认声明Page_Load和类似protected的方法,所以后代类可以调用它们。

答案 1 :(得分:3)

是的:

void Page_Load(object sender, System.EventArgs e) 
{
     // Do some things before calling the original Page_Load
     base.Page_Load(sender, e);
     // Do some things after calling the original Page_Load
}

这样做的原因是ASP.Net框架在模型上运行.aspx文件被编译成一个类,该类继承自代码隐藏文件中定义的类(实际上是由{{1定义的类)页面标记上的属性)

Inherits

答案 2 :(得分:0)

您也可以尝试使用PreLoad方法。那些在Page_Load之前被调用,可能是一种更清晰的处理方式。

答案 3 :(得分:0)

这适合我。

<script language="CS" runat="server"> 
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        Response.Write("additional stuff");
    } 
</script>
相关问题