我是以编程方式添加文本框和按钮,具体取决于sql结果中的数组计数。
我希望在每个文本框更改时或为每个文本框按下删除按钮时调用函数(deleteButton_Click)。
当我按下按钮时,页面重新加载(我使用上下文处理程序从上一页检索一些数据)
这是我的代码的一部分,如果需要,我可以包括整个事情。想法?
for(int i = 0; i < alMakers.Count; i++)
{
Label labLabel = new Label();
labLabel.Text = "Lab" + (i + 1);
labPanel.Controls.Add(labLabel);
TextBox labs = new TextBox();
labs.ID = "lab" + i;
//labs.TextChanged += deleteLab;
labPanel.Controls.Add(labs);
labs.Text = labsList.GetValue(i).ToString();
Button deleteButton = new Button();
deleteButton.Text = "Delete";
deleteButton.Click += deleteButton_Click;
labPanel.Controls.Add(deleteButton);
//form1.Controls.Add();
}
这是我从上一页检索项目时的部分页面加载。
protected void Page_Load(object sender, EventArgs e)
{
string studentID;
if (!IsPostBack)
{
Page lastPage = (Page)Context.Handler;
studentID = ((TextBox)lastPage.FindControl("editStudent")).Text;
Label1.Text = studentID;
编辑: 我的deleteButton_Click函数(目前还没有做任何事情,只是将标签文本更改为“Hello”)
protected void deleteButton_Click(object sender, EventArgs e)
{
Label2.Text = "Hello";
}
答案 0 :(得分:1)
在WebForms中,控件事件(例如按钮单击)会导致页面完全重新加载。当发生这种情况时,您将从头开始,并且必须重新创建按钮。听起来你可能已经意识到了这一点。此外,ASP.Net Webforms中的控件事件依赖于ViewState。在Page_Load运行时,ViewState已经完成加载。如果等待那么长时间来重新创建按钮,那么为按钮连接事件处理程序已经太晚了。
为了点击您的点击事件,您需要在加载ViewState之前在page lifecycle中的较早位置创建按钮,例如Page_Init。