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里面,一旦我点击lb1lb2,问题就会不断变化。我把!IsPostBack放进Page_Load里面后,一旦我点击lb1lb2Panel1Panel2就变成了虚无......我的页面变得完全空白...出了什么问题???

what wrong with !IsPostBack?

因为您要将控件添加到 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