繁体   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