.net 从内联代码调用原始页面加载函数

.net 从内联代码调用原始页面加载函数,.net,asp.net,code-behind,inline-code,.net,Asp.net,Code Behind,Inline Code,我喜欢对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

我喜欢对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>

无效页面加载(对象发送方,System.EventArgs e)
{
//除了最初的页面加载方法之外,还要做一些事情
}
但是看起来只有内联代码中的Page_Load方法将被执行,而不是原始代码隐藏文件(在编译的程序集中)中的方法

可以从内联代码中调用原始方法吗?或者有没有其他方法可以添加在内联代码中调用Page_Load方法后直接运行的内容,而无需修改现有程序集?

是的:

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
属性定义的类)


您也可以尝试使用
预加载
方法。这些在
页面加载之前被调用,可能是一种更干净的处理方式

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> 

无效页面加载(对象发送方,System.EventArgs e)
{      
基本页面加载(发送方,e);
//除了最初的页面加载方法之外,还要做一些事情
} 
没有可访问性问题,因为asp.net默认声明Page_Load和类似的方法为受保护的
,因此子类可以调用它们。

这对我很有用

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

        Response.Write("additional stuff");
    } 
</script>

受保护的覆盖无效加载(事件参数e)
{
基础荷载(e);
回复。写下(“其他材料”);
} 

应该是base.Page\u Load(发送方,e);非常感谢你!
<script language="CS" runat="server"> 
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        Response.Write("additional stuff");
    } 
</script>