0
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;
}

在这种情况下,如果我没有把!IsPostBackPage_Load 放在里面,一旦我点击lb1or lb2,问题就会不断变化.. 放入!IsPostBack里面之后Page_Load,一旦我点击lb1or lb2Panel1然后就Panel2什么都没有了......我的页面变得完全空白.. . 怎么了???

4

3 回答 3

0

由于无法编译您的代码,我只是在这里猜测,但由于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负载状态,以便显示。

于 2013-10-23T16:27:40.590 回答
0

在第一种情况下,不将 !IsPostBack 在第一次加载页面时调用 loadQuestion 方法调用 loadQuestion 以及触发回发的任何内容。在第二种情况下,将 !IsPostback 添加到 load 方法仅在初始加载时调用 loadQuestion 而不是在回发时调用,这是您的点击事件导致的。最后,控件是在加载过程中动态添加的,这些控件不会通过回发存在。考虑使用 AJAX http://www.asp.net/ajaxlibrary/act.ashx

于 2013-10-23T16:28:24.943 回答
0

因为您将控件添加到 LoadQuestion 函数内的面板。当页面重新加载时,将创建面板,但不会创建标签和单选按钮列表。

要拥有此功能,每次通过 Page_Load,您都需要在面板中重新创建控件,但随后您需要从数据库中重新加载问题或将它们存储在某个位置,例如 ViewState 或 Session 中,然后使用这些重新填充单选按钮列表..

于 2013-10-23T16:24:43.030 回答