protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
LoadQuestion(); //randomly choose question from database and put inside panel1
LoadQuestion1();//randomly choose question from database and put inside panel2
Panel1.visible=true;
Panel2.visible=false;
}
void LoadQuestion()
{
while (dtr.Read())
{
question[index, 0] = dtr["Question"].ToString().Trim();
question[index, 1] = dtr["OptionA"].ToString().Trim();
question[index, 2] = dtr["OptionB"].ToString().Trim();
question[index, 3] = dtr["OptionC"].ToString().Trim();
question[index, 4] = dtr["OptionD"].ToString().Trim();
question[index, 5] = dtr["Answer"].ToString().Trim();
question[index, 6] = dtr["QuestionNo"].ToString().Trim();
index++;
}
for(i=0;i<10;i++)
{
Label lbl = new Label();
RadioButtonList rad = new RadioButtonList();
lbl.ID = "lbl" + i.ToString();
rad.ID = "rad" + i.ToString();
lbl.Text = i + ". " + question[num, 0].ToString();
rad.Items.Add(question[i, 1]);
rad.Items.Add(question[i, 2]);
rad.Items.Add(question[i, 3]);
rad.Items.Add(question[i, 4]);
Panel1.Controls.Add(lbl);
Panel1.Controls.Add(rad);
}
}
void LoadQuestion1()
{
for(i=11;i<20;i++)
{
Label lbl = new Label();
RadioButtonList rad = new RadioButtonList();
lbl.ID = "lbl" + i.ToString();
rad.ID = "rad" + i.ToString();
lbl.Text = i + ". " + question[num, 0].ToString();
rad.Items.Add(question[i, 1]);
rad.Items.Add(question[i, 2]);
rad.Items.Add(question[i, 3]);
rad.Items.Add(question[i, 4]);
Panel2.Controls.Add(lbl);
Panel2.Controls.Add(rad);
}
}
protected void lb1_Click(object sender, EventArgs e)
{
Panel1.Visible = true;
Panel2.Visible = false;
}
protected void lb2_Click(object sender, EventArgs e)
{
Panel2.Visible = true;
Panel1.Visible = false;
}
在这种情况下,如果我没有将!IsPostBack
放在Page_Load中,一旦我点击lb1
或lb2
,问题就会不断变化..
我将!IsPostBack
放入Page_Load
后,点击lb1
或lb2
后,Panel1
和Panel2
就变为空...我的页面变得完全空白......出了什么问题???
答案 0 :(得分:0)
因为您要将控件添加到LoadQuestion函数内的面板中。页面重新加载时,将创建面板,但不会创建标签和RadioButton列表。
要拥有此功能,每次通过Page_Load,您需要在面板中重新创建控件,但是您需要从数据库重新加载问题或将它们存储在某个地方,例如在ViewState或Session中并使用这些来重新设置 - 填充radiobutton列表..
答案 1 :(得分:0)
由于无法编译你的代码我只是在这里猜测,但是因为IsPostBack
看起来当前请求是不是回发(IE第一页加载)它不会执行< / p>
LoadQuestion(); //randomly choose question from database and put inside panel1
LoadQuestion1();//randomly choose question from database and put inside panel2
Panel1.visible=true;
Panel2.visible=false;
您需要将其中一个面板移动到PostBack
负载中,以便显示。
答案 2 :(得分:0)
在第一种情况下没有放入!加载方法中的IsPostBack在首次加载页面时调用loadQuestion以及触发回发的任何内容。在第二种情况下,添加!isPostback到load方法只调用初始加载时的loadQuestion,而不是回发,这是你的点击事件引起的。最后,在加载期间动态添加控件,这些控件将不会通过回发存在。考虑使用AJAX http://www.asp.net/ajaxlibrary/act.ashx