我覺得這是一個有趣的小問題。我認爲原因在於頁面對象/事件生成的生命週期背後,但問題是我如何解決這個問題?如果UserControl.ascx通過LoadControl(ctr)加載,事件不起作用
Default.aspx中存在着一些有趣的控制還包括
<asp:PlaceHolder runat="server" id="phUserContent"></asp:PlaceHolder>
此佔位符是空的,直到運行時。在某些情況下,後面的代碼會將UserControl加載到其中。像這樣
Control ctr = LoadControl("~/UserControl/Note.ascx");
phUserContent.Controls.Add(ctr);
這Note.ascx包含了一些有趣的控件和最後一個觸發事件一個LinkButton。 LinkButton的代碼是非常容易和gramatically正確,
<asp:LinkButton runat="server" ID="lbUpdate" OnClick="lbUpdate_Click" Text="Update"></asp:LinkButton>
後面的代碼爲ASCX我對事件的代碼,
protected void lbUpdate_Click(object sender, EventArgs e)
{ ... }
正如我wroted中,回發發生時,頁面會重新生成,因爲我懷疑 - 但沒有執行lbUpdate_Click事件。當然,嘗試一個斷點。
我正在尋找兩種可能的情況。一個是我錯過了一些非常簡單的事情(你知道,就像文件背後的錯誤代碼一樣)或者我錯過了頁面生成周期的一個重要部分。
我主要是到第二個,像這樣(我只是想在這裏..)
1頁(ASCX)得到它的變化 2.提交被點擊 3. ASCX重新生成 4。事件已被清除,但存在並沒有投射錯誤。 5.重新加載後,初始內容被重新加載
其效果是編譯器無法看到斷點,並且由於「執行空事件」而從未保存過值。但這只是一個業餘愛好者的猜測,請大家指教。
[UPDATE AS PER ANSWER] 這就是我如何解決它,根據下面的答案答案。
List<Control> ctr;
public User()
{
ctr = new List<Control>();
}
protected void Page_PreInit(object sender, EventArgs e)
{
ctr.Add(LoadControl("~/UserControl/Note.ascx"));
}
protected void Page_Load(object sender, EventArgs e)
{
ctr.ForEach(d => phUserContent.Controls.Add(d));
}
不久..
1.全班起立控制列表
2.在Page_PreInit(創建之前)添加UC(u能在這裏他們的X)
3.在Page_Load中(其中所有的ctr被創建)將每個UC添加到PH。
這也使得在UC的事件也在努力,沒有魔法,沒有愚蠢的併發症:-)
感謝您的評論。我真的必須想一點,才能在你的文本中找到我的問題。儘管如此,您可以更輕鬆地將解決方案與您的描述聯繫起來。並找到它。我會用答案更新我的Q. – Independent