0

我遇到了一个问题,我将其简化为下面的代码。我在 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);
            }

 }     

单击“获取数据”按钮时,会生成多个带有相关文本的复选框。

我单击一些复选框,然后单击显示按钮,如果工作正确,该按钮应将选定的复选框文本组合成单个字符串并显示它。

显示

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;

请提供代码帮助。请向我提供代码输入。如果我不能说清楚,我会完善我的问题。

4

1 回答 1

3

由于 HTTP 的无状态性,您需要在每个回发(inPage_Init或)上重新创建动态创建的控件。Page_Load你需要知道你必须重新创建什么。因此,您可以将已创建的数量保存CheckBoxesViewState变量中。

您只需要分配与以前相同的 ID 并Page_Load最迟添加它们。如果您知道要创建的控件的数量,则可以通过将计数器变量附加到控件 ID 来从计数器变量中派生 ID。

推荐读物:

或者您使用像Repeater这样自动执行此操作的内置数据绑定控件之一。你只需要设置它们并调用()。DataSourceDataBind

以下是我对具有实施细节的类似问题的回答:

于 2012-12-10T11:35:28.383 回答