ASP.Net:将额外的代码添加到Page_Load中,在codebehind中的代码之上
本文关键字:代码 Load codebehind Net ASP 添加 Page | 更新日期: 2023-09-27 18:07:16
我试图添加一些额外的代码行到一个ASP的Page_Load方法。. Net页,其中现有的Page_Load代码存储在编译后的代码隐藏DLL中。虽然我可以使用dis#提取Page_Load方法的代码,但我无法访问DLL的源代码。
添加新代码的最佳方式是什么?我需要现有的Page_Load代码与新代码一起执行,它们以什么顺序执行并不重要。
具体来说,我正在修复一个使用Telerik raddeditor的旧应用程序,它在Firefox 6下不能正常工作。
如果你可以访问ASPX部分,你可以尝试添加一个代码块到ASPX,并覆盖OnInit或OnPreInit,这应该可以很好地为你试图添加的代码。
<script runat="server">
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
if (Request.Browser.Browser.ToLowerInvariant() == "firefox")
{
System.Reflection.FieldInfo browserCheckedField = typeof(RadEditor).GetField("_browserCapabilitiesRetrieved", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
browserCheckedField.SetValue(RadEditor1, true);
System.Reflection.FieldInfo browserSupportedField = typeof(RadEditor).GetField("_isSupportedBrowser", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
browserSupportedField.SetValue(RadEditor1, true);
}
}
</script>
您可以从其他Page类派生并添加Page.Load
事件处理程序:
public class YourPage : TheirPage
{
public YourPage() { Load += YourPage_Load; }
void YourPage_Load(object s, EventArgs e) { ... }
}
或甚至覆盖OnLoad()
:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
...
}
您需要提取所有源代码,添加代码并重新构建整个dll。没有办法做到这一点,而不重建原来的组装。如果原始程序集是强命名的,这将是一个问题。否则,这是一个痛苦,但你应该没事。
你能在aspx页面中钩入PreLoad吗?此时控件已加载,您应该能够执行所需操作。有时需要额外的处理,你也可以挂钩到LoadComplete,我认为这可能对你最好?
http://msdn.microsoft.com/en-us/library/system.web.ui.page.preload.aspx http://msdn.microsoft.com/en-us/library/system.web.ui.page.onloadcomplete.aspx如果可以通过反汇编从DLL中提取代码,则可以分离页面后面的代码并在标记中重新实现逻辑。
<%@ Page Language="C#" AutoEventWireup="true" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
lblTest.Text = "Something here";
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblTest" runat="server" ></asp:Label>
</div>
</form>
</body>
</html>
您可以从现有的类派生并覆盖任何呈现方法,例如OnPreRender()方法:
public class Class1 : _Default
{
protected override void OnPreRenderComplete(EventArgs e)
{
base.OnPreRenderComplete(e);
// add your code here
}
}