【问题标题】:Calling the original Page_Load function from inline code从内联代码调用原始的 Page_Load 函数
【发布时间】:2011-09-30 13:02:30
【问题描述】:

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

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

<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 方法后直接运行的内容,而无需修改现有程序集?

【问题讨论】:

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


    【解决方案1】:

    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 类似的方法,因此后代类可以调用它们。

    【讨论】:

    • 应该是base.Page_Load(sender, e);
    • 非常感谢!
    【解决方案2】:

    是的:

    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 文件被编译成一个类的模型上运行,该类继承自代码隐藏文件中定义的类(实际上是 Inherits 定义的类页面标签上的属性)

    <%@ Inherits="WebApplication1._Default" ... 
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        这对我有用。

        <script language="CS" runat="server"> 
            protected override void OnLoad(EventArgs e)
            {
                base.OnLoad(e);
        
                Response.Write("additional stuff");
            } 
        </script>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-07
          • 2013-07-07
          • 1970-01-01
          • 2016-11-14
          相关资源
          最近更新 更多