[英]dynamically created button click event not firing
我對此進行了一些研究,但是發現的解決方案似乎都無法解決我的問題。 我在C#中有一個asp.net Web應用程序,我想從下拉列表中進行選擇后動態添加一個提交按鈕。
protected void Page_Load(object sender, EventArgs e)
{
submitButton.Text = "Submit";
submitButton.ID = "submitButton";
submitButton.Click += new EventHandler(submitButton_Click);
SelectionDropDownList.SelectedIndexChanged += new EventHandler(SelectionDropDownList_SelectedIndexChanged);
}
protected void SelectionDropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
switch (SelectionDropDownList.SelectedIndex)
{
case 1:
//does a redirect
break;
case 2:
Panel1.Controls.Add(submitButton);
break;
case 3:
//does a redirect
break;
}
}
protected void submitButton_Click(object sender, EventArgs e)
{
//can't get this event to fire.
SubmitSearch();
}
這是一個時間問題。 您的程序流程如下:
那是Webforms令人討厭的細節之一,也是不使用它的一個很好的理由-如果您可以自由選擇的話。 如果必須使用它, http://msdn.microsoft.com/zh-cn/library/ms178472.aspx可能會有所幫助。
總是動態添加控件,而不是動態添加控件,而是先設置Visible=false
。 然后,您當前在何處添加它,而不是使其可見?
動態控件在Web窗體中總是有些棘手。
在您發布的示例中,按鈕看起來不是動態的; 看起來您只是在動態分配事件處理程序。 如果是這種情況,則無需在頁面每次回發時都重新分配事件處理程序。 因此,如果該ID已在標記中定義,則您也不應重新分配該ID。
嘗試這個:
if (!Page.IsPostBack)
{
Button1.Click += new EventHandler(Button1_Click);
}
編輯
從代碼的外觀來看,處理您的情況的正確方法是將控件放入面板中,並在下拉列表的選定索引更改時切換面板的可見性。
protected void DropDown1_SelectedIndexChanged(object sender, EventArgs e)
{
Panel1.Visible = SomeIntValue == 2;
}
根據您當前的代碼:
如果我在標記中創建一個按鈕,如下所示:
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" ...>
在后面的代碼中,我嘗試將控件移至另一個面板,如下所示:
SomePanel.Controls.Add(Button1);
這不是執行您要執行的操作的正確方法,但從技術上講,無論您將控件移至何處,ID(在服務器上)和事件處理程序都將保持不變。
嘗試在情況2中創建一個按鈕。
如果要在WebForms中動態創建控件,則必須始終在每次回發時以及在加載ViewState之前重新創建它們。 否則,您將導致ViewState損壞/損壞。 另外,我認為事件必須最遲在Page.OnLoad(EventArgs e)中附加,以使其觸發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.