怎么了!IsPostBack?

时间:2013-10-23 16:13:33

标签: c#

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后,点击lb1lb2后,Panel1Panel2就变为空...我的页面变得完全空白......出了什么问题???

3 个答案:

答案 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