我遇到了一个问题,我已将其缩减为以下代码。我在aspx页面上有两个按钮。
这两个按钮都具有runat="server"
属性,位于<form 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);
}
}
单击“获取数据”按钮,将生成多个带有关联文本的复选框。
我点击了一些复选框,然后点击显示按钮如果工作正确应将选定的checboxes文本组合成单个字符串并显示它。
btnShow
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);
}
但是一旦我点击GetData按钮,复选框就会丢失,因为它们不会持续存在。我读到了SESSION
个变量,但无法弄清楚如何应用它们。
我已将下面的变量声明为全局变量,以便可以在整个页面中访问它们。
CheckBox[] cb;
string[] headlines;
string masg;
请帮助代码。请在代码中提供输入。如果我不能说清楚的话,我会改进我的问题。
答案 0 :(得分:3)
由于HTTP的无状态,您需要在每个回发(Page_Init
或Page_Load
)上重新创建动态创建的控件。你需要知道你需要重新创建什么。因此,您可以将已创建的CheckBoxes
的数量保存在ViewState
变量中。
您只需要分配与以前相同的ID,并最迟在Page_Load
中添加。如果您知道要创建的控件数,则可以通过将其附加到control-id来从计数器变量中派生ID。
可推荐的读物:
或者您使用内置Data-Bound Control之类的Repeater自动执行此操作。您只需设置DataSource
并致电DataBind
()。
以下是关于实施细节的类似问题的答案: