我的用户控制有问题。 我点击按钮后在我的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上的按钮后,usercontrol被释放,如果它没有在pag_init或页面上创建加载它就不会停留,但是我需要在我的按钮点击事件上创建它并找到一种方法让它不消失。
提前感谢,Daniel
答案 0 :(得分:1)
您可能必须添加一个事件处理程序,它可以触发click事件并调用您的委托
Control.Click += btnAdd_Click1;
答案 1 :(得分:0)
动态创建的控件一旦添加,就必须位于每个页面加载的页面上才能正常工作。你的情况会发生什么:
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;
}
请注意,此处的事件名称不是真实的,这只是可以做什么的草图。