[英]Why does my dynamically created user control doesn't fire button click event
我的用戶控制有問題。 我單擊按鈕后在aspx頁面上動態創建它:
protected void btnAddRules_Click(object sender, EventArgs e)
{
RuleProperty Control = (RuleProperty)LoadControl("RuleProperty.ascx");
MyPanel.Controls.Add(Control);
}
當我單擊用戶控件的按鈕時,按鈕事件不會觸發,並且用戶控件將消失。 這是按鈕事件:
protected void btnAdd_Click1(object sender, EventArgs e)
{
WowzaRule rule = GetRuleFromGUI();
RuleList.Add(rule);
//Session["RuleList"] = RuleList;
//List<WowzaRule> test = new List<WowzaRule>();
SaveToXMLFiles(txtdbnum.Text, RuleList);
}
我知道在按下mypage上的按鈕后,用戶控件將被釋放,如果未在pag_init或頁面Load上創建它,則不會保留,但是我需要在我的按鈕click事件上創建它,並找到一種使其不消失的方法。
在此先感謝Daniel
您可能需要添加一個事件處理程序,該事件處理程序可以觸發click事件並調用您的委托
Control.Click += btnAdd_Click1;
動態創建的控件(一旦添加)必須在每次加載頁面時都放在頁面上才能正常工作。 您的情況如何:
RuleProperty
RuleProperty
的按鈕 要解決此問題,您需要在每次頁面加載時添加控件,例如使用存儲在ViewState
某些標志:
protected void Page_Load(object sender, EventArgs e)
{
if (ViewState["AddRuleProperty"] != null && (bool)ViewState["AddRuleProperty"])
{
AddRulePropertyControl();
}
}
protected void btnAddRules_Click(object sender, EventArgs e)
{
AddRulePropertyControl();
ViewState["AddRuleProperty"] = true;
}
private void AddRulePropertyControl()
{
RuleProperty Control = (RuleProperty)LoadControl("RuleProperty.ascx");
MyPanel.Controls.Add(Control);
}
更新。
如果以后要在控件的單擊處理程序中從頁面中刪除控件,則需要刪除相應的ViewState鍵。 由於屬性Page.ViewState
受保護,因此無法直接從控件中進行此操作,這也將創建不必要的依賴關系。
似乎正確的方法是從Page訂閱同一事件(您可能需要使該事件從控制器可見)並在其中重置鍵。 像這樣:
private void AddRulePropertyControl()
{
RuleProperty Control = (RuleProperty)LoadControl("RuleProperty.ascx");
Control.ButtonClick += RuleProperty_ButtonClick;
MyPanel.Controls.Add(Control);
}
private void RuleProperty_ButtonClick()
{
ViewState["AddRuleProperty"] = false;
}
請注意,這里的事件名稱不是真實的,這只是可以做的事情的草圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.