提交后维护在代码隐藏中创建的控件

时间:2012-07-20 17:39:02

标签: c# asp.net viewstate

我有一个看起来像这样的功能(简化):

private void showQuestions()
{
     for (int ansNum = 0; ansNum < 6; ansNum++)
     {
         RadioButton rb = new RadioButton();
         rb.ID = x + letterArray[randomArray[ansNum]].ToString();
         rb.GroupName = "answer" + x;
         rb.Text = char.ToUpper(letterArray[currentCount]) + ". " + dt.Rows[x - 1].ItemArray[2 + randomArray[ansNum]];
         fieldSet.Controls.Add(rb);
     }
}

如果不是IsPostBack,我在pageLoad上调用showQuestions()。该方法实际上是从数据库中随机化问题,然后将单选按钮添加到我的fieldset控件。上面的代码缺少很多内容。

在提交时,我希望这些单选按钮保留在页面上,但它们会被删除。我不想再次调用showQuestions(),因为这会使订单混乱,让我在额外的时间点击数据库。

点击提交并进行其他更改后如何将其保留在页面上?

1 个答案:

答案 0 :(得分:1)

如果您每次都没有调用方法创建它们,那么在回发后您将无法在页面上保留动态创建的控件。您可以使用UpdatePanel来完成此任务,但这是一个非常昂贵的http调用,这会导致无论如何都会在服务器上命中Page_Load方法。

我建议使用ajax调用来发布您的数据。在提交表单时,您可以调用客户端方法,a)填充表示表单数据的json对象,以及b)使用ajax将数据发布到服务方法。

同样,UpdatePanel也会起作用,但我倾向于不惜一切代价避免它。