我的面条有一种感觉的火花。我正在浏览我的ASP.NET页面,我注意到了
挂起,Page_Load不等于类的名称,因此它不能是我的aspx.cs页面上我的类的构造函数
我有一种直觉,AutoEventWireup="true"
负责告诉页面,默认情况下,调用protected void Page_Load(object sender, EventArgs e)
方法。问题(和问题)是我不知道如何或在哪里可以查看哪些事件连接到哪些处理程序。我确信AutoEventWireup="true"
在某个地方有这个代码段:
this.Load += this.Page_Load
我只是想扩大我的知识。我在哪里可以看到AutoEventWireup正在“连接”哪些事件?
修改
我在尝试进行虚拟构造函数调用后发现了这个想法(因为我不小心删除了Page_Load
,我在代码隐藏中创建了一个构造函数.Resharper建议我必须密封这个类。我认为这种情况并不常见双重检查了另一个页面,并将我的Page_Load
复制粘贴回来。这就是我想知道事件是如何实际连线的。我们如何知道它必须调用Page_Load
?
答案 0 :(得分:2)
这适用于.NET 4其他框架会略有不同但是在使用Reflector时,您可以发现TemplateControl
Page
和UserControl
都继承了私有方法{{1}这会将这些代表连接起来。
GetDelegateInformationWithNoAssert
如果您按照此方法的用法进行操作,您将看到它从private void GetDelegateInformationWithNoAssert(IDictionary dictionary)
{
if (this is Page)
{
this.GetDelegateInformationFromMethod("Page_PreInit", dictionary);
this.GetDelegateInformationFromMethod("Page_PreLoad", dictionary);
this.GetDelegateInformationFromMethod("Page_LoadComplete", dictionary);
this.GetDelegateInformationFromMethod("Page_PreRenderComplete", dictionary);
this.GetDelegateInformationFromMethod("Page_InitComplete", dictionary);
this.GetDelegateInformationFromMethod("Page_SaveStateComplete", dictionary);
}
this.GetDelegateInformationFromMethod("Page_Init", dictionary);
this.GetDelegateInformationFromMethod("Page_Load", dictionary);
this.GetDelegateInformationFromMethod("Page_DataBind", dictionary);
this.GetDelegateInformationFromMethod("Page_PreRender", dictionary);
this.GetDelegateInformationFromMethod("Page_Unload", dictionary);
this.GetDelegateInformationFromMethod("Page_Error", dictionary);
if (!this.GetDelegateInformationFromMethod("Page_AbortTransaction", dictionary))
{
this.GetDelegateInformationFromMethod("OnTransactionAbort", dictionary);
}
if (!this.GetDelegateInformationFromMethod("Page_CommitTransaction", dictionary))
{
this.GetDelegateInformationFromMethod("OnTransactionCommit", dictionary);
}
}
调用,并且此方法仅在HookUpAutomaticHandlers
为真时附加代理。