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