【发布时间】:2012-12-31 14:01:20
【问题描述】:
我有一个用户控件(导航)嵌套在另一个用户控件(标题)中,该控件是从控件类(标准)动态加载的。
用户控件、Navigation 和 Header 的 AutoEventWireup = false。
控件类 Standard 调用从配置项加载 Header 用户控件。
private void layoutAndRender(HtmlTextWriter output, string UserControlKey, NameValueCollection UserControlsConfiguration)
{
if(UserControlsConfiguration[UserControlKey] != null && UserControlsConfiguration[UserControlKey].ToString() != "")
{
string suc = System.Web.HttpContext.Current.Request.ApplicationPath + UserControlsConfiguration[UserControlKey].ToString();
UserControl ucToRender = (UserControl)this.Page.LoadControl(suc);
ucToRender.RenderControl(output);
}
}
我的问题是我想在 Navigation 用户控件中初始化一个可以接受 Page.Request 和 Page.Response 的对象,但是在后面的 Navigation 代码中似乎没有触发事件。
我用来初始化我的对象的代码是:
this.browser = new Browser(this.Request, this.Response);
我尝试在 Navigation 构造函数中执行此操作,但此时未设置 this.Request 和 this.Response。
我尝试在 void Page_Load(object sender, System.EventArgs e) 方法中使用该语句,但这似乎没有触发,即使我在 Navigation 构造函数中有 this.Load += new System.EventHandler(this.Page_Load);。
我也为 Page_Init 和 Page_PreRender 尝试了类似的语句,但这些语句似乎都没有触发。
如果以我加载它们的方式加载,加载了 LoadControl 的控件是否不会触发 Load 或 Init 事件,并且它可能包含的任何用户控件也是如此?
【问题讨论】:
-
从哪里调用
layoutAndRender方法? -
它是从控制类标准中调用的。不幸的是,这是遗留代码,并不总是以正确的方式完成。
-
你能说得更具体些吗?
layoutAndRender是在Standard的Page_Load方法中调用的,还是从其他地方调用的,比如Render方法? -
layoutAndRender是从Standard::Render调用的。Standard扩展System.Web.UI.Control。我可以看到它是这样做的。因为在多个layoutAndRender调用中间是一个base.Render()启用布局。
标签: asp.net user-controls event-handling