C# 为什么动态创建的用户控件没有';t点火按钮点击事件
我的用户控制有问题。 单击按钮后,我在我的aspx页面上动态创建它:C# 为什么动态创建的用户控件没有';t点火按钮点击事件,c#,.net,winforms,user-controls,C#,.net,Winforms,User Controls,我的用户控制有问题。 单击按钮后,我在我的aspx页面上动态创建它: protected void btnAddRules_Click(object sender, EventArgs e) { RuleProperty Control = (RuleProperty)LoadControl("RuleProperty.ascx"); MyPanel.Controls.Add(Control); } 当我单击
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);
}
protectedvoid btnAdd\u Click1(对象发送者,事件参数e)
{
WowzaRule rule=GetRuleFromGUI();
规则列表。添加(规则);
//会话[“规则列表”]=规则列表;
//列表测试=新列表();
SaveToXMLFiles(txtdbnum.Text,规则列表);
}
我知道在按下mypage上的按钮后,usercontrol被释放,如果它不是在pag_init或page Load上创建的,它将不会保留,但我需要在我的button 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
受保护,而且这会创建不需要的依赖项
这样做的正确方法似乎是从页面订阅相同的事件(您可能需要使此事件从控制器可见),然后重置其中的键。像这样:
private void AddRulePropertyControl()
{
RuleProperty Control = (RuleProperty)LoadControl("RuleProperty.ascx");
Control.ButtonClick += RuleProperty_ButtonClick;
MyPanel.Controls.Add(Control);
}
private void RuleProperty_ButtonClick()
{
ViewState["AddRuleProperty"] = false;
}
请注意,这里的事件名称不是真实的,这只是一个可以执行的操作的草图。我应该在哪里添加它?我的用户控件不是按钮。我无法写入控件。单击“我没有此选项…”。。。。。。您必须通过用户控件公开该单击事件,并将其重定向到用户控件中按钮的事件您已经用
winforms
标记了问号,但看起来您有一个asp.net应用程序和web表单还有一件事,用户控件的按钮事件完成后,如何返回页面?您的意思是“如何删除控件”?如果是,则只需将btnAdd\u Click1
中的ViewState标志重置为false即可。该标志本应有效。您可以发布您尝试过的代码吗?受保护的void btnAdd_Click1(对象发送者,事件参数e){WowzaRule rule=GetRuleFromGUI();RuleList.Add(规则);SaveToXMLFiles(txtdbnum.Text,RuleList);ViewState[“AddRuleProperty”]=false;}ViewState是像会话一样工作,还是以不同的方式附加到每个页面?也许这就是它不起作用的原因?