在asp.net Web表单应用程序中,我从SQL数据库中随机提取最多2个问题和最多3个答案(针对每个问题)。对于每个问题,我动态创建一个RadioButtonList控件来保存答案集。
当触发回发时,我需要读取每个RadioButtonList的值。我不需要仅仅根据所选索引/值保留控件本身,因为如果答案错误,将创建一组新的(不同的)问题和答案,如果答案正确,则会将用户重定向到新页面。
我试图在回发期间在Page_init事件中重新创建控件,但因为我的动态控件是基于随机数据集创建的,所以每次都会有不同的。
在Page_Load上创建动态控件:
foreach (DataRow question in dt_questions.Rows)
{
questionCounter++;
RadioButtonList RBL_Answers = new RadioButtonList();
RBL_Answers.ID = "RBL_Answers_" + questionCounter;
// fill radio list with answers to pick from
foreach (DataRow answer in dt_answers.Rows)
{
ListItem item = new ListItem(answer["IA_Text"].ToString(), answer["IA_Correct"].ToString());
RBL_Answers.Items.Add(item);
}
Panel_ContentQA.Controls.Add(RBL_Answers);
}
答案 0 :(得分:0)
要解决这个问题,我必须改变我的工作方式,以便SQL页面中创建的控件的(随机)行的主键ID存储在ViewState中。发生回发时,将重新创建控件,从SQL中获取与存储在ViewState中的PK相对应的相同数据。