我喜欢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方法后直接运行而不修改现有程序集的内容?
答案 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>