在ASP.NET C#中跨多个回发传递动态创建的复选框
我被困在一个问题,我已经减少到下面的代码。我在aspx页面上有两个按钮。 这两个按钮都具有在ASP.NET C#中跨多个回发传递动态创建的复选框,c#,asp.net,C#,Asp.net,我被困在一个问题,我已经减少到下面的代码。我在aspx页面上有两个按钮。 这两个按钮都具有runat=“server”属性,并且位于标记内 btnGetData protected void btnGetData_Click(object sender, EventArgs e) { headlines = masg.Split('*'); //Response.Write(headlines.Length); cb =
runat=“server”
属性,并且位于
标记内
btnGetData
protected void btnGetData_Click(object sender, EventArgs e)
{
headlines = masg.Split('*');
//Response.Write(headlines.Length);
cb = new CheckBox[headlines.Length];
for (int i = 0; i < headlines.Length; i++)
{
cb[i] = new CheckBox();
cb[i].Text = headlines[i];
Literal br = new Literal();
br.Text = "<br/>";
Form.Controls.Add(cb[i]);
Form.Controls.Add(br);
}
}
请提供代码帮助。请提供代码输入。如果我不能说清楚,我会改进我的问题。由于HTTP的无状态性,您需要在每次回发(在
Page\u Init
或Page\u Load
中)上重新创建动态创建的控件。你需要知道你必须重新创造什么。因此,您可以将已创建的复选框的数量保存在ViewState
变量中
您只需分配与以前相同的ID,并最迟将其添加到Page\u Load
。如果知道要创建的控件的数量,可以通过将计数器变量附加到control-ID,从中派生ID
推荐读数:
或者你可以使用一个内置的,自动完成这个任务。您只需设置它们的数据源
并调用数据绑定
()
以下是我对类似问题的回答,以及实施细节:
由于HTTP的无状态性,您需要在每次回发(在
Page\u Init
或Page\u Load
中)上重新创建动态创建的控件。你需要知道你必须重新创造什么。因此,您可以将已创建的复选框的数量保存在ViewState
变量中
您只需分配与以前相同的ID,并最迟将其添加到Page\u Load
。如果知道要创建的控件的数量,可以通过将计数器变量附加到control-ID,从中派生ID
推荐读数:
或者你可以使用一个内置的,自动完成这个任务。您只需设置它们的数据源
并调用数据绑定
()
以下是我对类似问题的回答,以及实施细节:
所以动态创建的控件会在第一次单击按钮时被清除……但是有没有办法将选中的复选框传递给下一个按钮?我只需要在单击GetData按钮时生成复选框,这些控件在下一次回发时不再存在。因此,如果您想访问它们的状态(例如Checked
属性)或想要处理它们的事件(例如CheckedChanged
事件),则需要重新创建它们。您可以尝试使用请求。表单[]
,尽管我更喜欢干净的方法并重新创建它们。但是如果我重新创建它们,复选框集是否会有所不同。如果我理解正确,我选择的复选框将丢失…?@mhasan:不,这是ViewState的工作方式。您只需要像以前一样创建具有“正确”ID的控件。然后将加载该值并成功触发事件。正确的意思是:如果你有10个动态控件,你需要知道数字10。然后,您可以使用此编号创建ID为复选框\u 1
到复选框\u 10
的控件。然后,您需要确保在下次回发时重新创建这些复选框。因此,您只需将10存储在ViewState
或Session
变量中。。如果像本例中那样传递大数据,将导致显著的处理开销,因此不建议使用它。你能不能给我提供一个替代方案…我的知识不足…所以动态创建的控件会在第一次点击按钮时被删除…但是有没有办法将选中的复选框传递给下一个按钮?我只需要在单击GetData按钮时生成复选框,这些控件在下一次回发时不再存在。因此,如果您想访问它们的状态(例如Checked
属性)或想要处理它们的事件(例如CheckedChanged
事件),则需要重新创建它们。您可以尝试使用请求。表单[]
,尽管我更喜欢干净的方法并重新创建它们。但是如果我重新创建它们,复选框集是否会有所不同。如果我理解正确,我选择的复选框将丢失…?@mhasan:不,这是ViewState的工作方式。您只需要像以前一样创建具有“正确”ID的控件。然后将加载该值并成功触发事件。正确的意思是:如果你有10个动态控件,你需要知道数字10。然后,您可以使用此编号创建ID为复选框\u 1
到复选框\u 10
的控件。然后,您需要确保在下次回发时重新创建这些复选框。因此,您只需将10存储在ViewState
或Session
变量中。。如果像本例中那样传递大数据,将导致显著的处理开销,因此不建议使用它。你能不能给我提供一个替代方案,以弥补我的知识不足。。。
protected void btnShow_Click(object sender, EventArgs e)
{
for (int i = 0; i < headlines.Length; i++)
{
if (cb[i].Checked)
newmsg += cb[i].Text + '*';
}
Response.Write("<BR><BR><BR>" + newmsg);
}
CheckBox[] cb;
string[] headlines;
string masg;