what wrong with !IsPostBack?
本文关键字:IsPostBack with wrong what | 更新日期: 2023-09-27 18:36:39
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
就变成了虚无......我的页面变得完全空白...出了什么问题???
因为您要将控件添加到 LoadQuestion 函数内的面板中。当页面重新加载时,将创建面板,但不会创建标签和单选按钮列表。
要获得此功能,每次通过Page_Load,您都需要在面板中重新创建控件,但随后您需要从数据库中重新加载问题或将它们存储在某个地方,例如在视图状态或会话中,并使用它们重新填充单选按钮列表。
由于无法编译您的代码,我只是在这里猜测,但由于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;
您需要移动其中一个面板以处于PostBack
加载状态,以便显示它。
在第一种情况下不放 !加载方法中的 IsPostBack 在首次加载页面时调用 loadQuestion 以及触发回发的任何内容。在第二种情况下添加 !Is回发到加载方法仅在初始加载时调用 loadQuestion,而不是在回发时调用,这就是您的点击事件导致的原因。最后,控件在加载期间动态添加,这些控件不会通过回发存在。考虑使用 AJAX http://www.asp.net/ajaxlibrary/act.ashx