簡體   English   中英

為什么我動態創建的用戶控件不觸發按鈕單擊事件

[英]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;

動態創建的控件(一旦添加)必須在每次加載頁面時放在頁面上才能正常工作。 您的情況如何:

  1. 單擊按鈕后添加RuleProperty
  2. 使用此控件加載頁面
  3. 用戶單擊RuleProperty的按鈕
  4. 在頁面加載期間未將控件添加到控件樹中(相應的代碼僅在按鈕單擊處理程序中,並且未單擊該按鈕)
  5. ASP.NET不知道哪個控件觸發了該事件,因此未處理該事件

要解決此問題,您需要在每次頁面加載時添加控件,例如使用存儲在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM