![](/img/trans.png)
[英]Dynamically create EventHandler for a dynamically created .NET CheckBox from Powershell
[英]How to create an onClick eventHandler for a dynamically created button
目前,我正在为学生宿舍做一个项目,现在我必须实施一些关于学生的搜索策略。当用户点击.aspx页面中的另一个服务器按钮时,我必须动态创建一个按钮,因此我必须创建新创建的按钮的onclick事件处理程序。 我使用的代码片段是:
protected void btnsearchByName_Click(object sender, EventArgs e)
{
TextBox tbsearchByName = new TextBox();
Button btnsearchName = new Button();
tbsearchByName.Width = 250;
tbsearchByName.ID = "tbsearchByName";
tbsearchByName.Text = "Enter the full name of a student";
btnsearchName.ID = "btnsearchName";
btnsearchName.Text = "Search";
btnsearchName.Click += new EventHandler(this.btnsearchName_Click);
pnlsearchStudents.Controls.Add(tbsearchByName);
pnlsearchStudents.Controls.Add(btnsearchName);
}
protected void btnsearchName_Click(object sender, EventArgs e)
{
lblsearch.Text = "btnsearchName_Click event fired in " + DateTime.Now.ToString();
}
这里,问题是新创建的eventHandler不会被触发。 我已经浏览了这个网站,看了几个问题和答案,也经历了页面生命周期,他们都说动态按钮应该在Init或Pre_init上,但我的问题是我必须在点击另一个按钮时创建它,怎么可能呢?
您需要在每个回发时添加按钮的单击处理程序。
您可以在页面加载时在搜索学生面板中查找按钮,或者尝试使用页面OnInit()方法在创建时添加处理程序。
另请查看:
在这里: asp.net动态按钮与事件处理程序
(所有这些都给出了类似的建议)
试试这个http://msdn.microsoft.com/ru-ru/library/system.web.ui.webcontrols.button.command(v=vs.90).aspx
btnsearchName.Command += new CommandEventHandler(this.btnsearchName_Click);
btnsearchName.CommandName = "Click";
您需要重新创建按钮并每次都附加事件处理程序。 为此,创建一个按钮列表并将其保存在会话中。 在页面加载时,浏览列表并每次创建按钮
public Button create_button()
{
btnsearchName.ID = "btnsearchName";
btnsearchName.Text = "Search";
btnsearchName.Click += new EventHandler(this.btnsearchName_Click);
return btnsearchName;
}
public TextBox create_textbox()
{
TextBox tbsearchByName = new TextBox();
Button btnsearchName = new Button();
tbsearchByName.Width = 250;
tbsearchByName.ID = "tbsearchByName";
tbsearchByName.Text = "Enter the full name of a student";
return tbsearchByName;
}
protected void btnsearchByName_Click(object sender, EventArgs e)
{
TextBox tbsearchByName = create_textbox();
Button btnsearchName = create_button();
//add to panels
pnlsearchStudents.Controls.Add(tbsearchByName);
pnlsearchStudents.Controls.Add(btnsearchName);
//add to session
List<Button> lstbutton = Session["btn"] as List<Button>
lstbutton.add(btnsearchName);
//similarly add textbox
//again add to session
Session["btn"] = lstbutton
}
public override page_load(object sender, eventargs e)
{
//fetch from session, the lstButton and TextBox and recreate them
List<Button> lstbutton = Session["btn"] as List<Button>;
foreach(Button b in lstbutton)
pnlsearchStudents.Controls.Add(b);
//similar for textbox
}
我不确定,但可能你必须像这样覆盖OnInit()方法。
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
}
您只需要将此代码添加到jquery代码的就绪状态,它也可以用于动态按钮
$(document).ready(function(){
$('input#tbsearchByName').click(function(){
// code goes here
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.