【发布时间】:2014-01-23 01:27:55
【问题描述】:
我在加载页面时遇到了一个问题,由于某种原因,我必须在它触发事件之前单击该按钮两次。
这是我的代码
protected void Page_Load(object sender, EventArgs e)
{
ds = DA.DsQndA(1);//pass quiz id to fill dataset with requested quiz.
numOfRows = ds.Tables[0].Rows.Count;//so we know when to get redirected to results page
//if we are at over max questions then go right to results page
if (myNum >= numOfRows)
Response.Redirect("~/QuizResult.aspx");
Question.InnerText = ds.Tables[0].Rows[myNum]["Question"].ToString();//very first question
Btn1.Click += BtnClick;
Btn2.Click += BtnClick;
Btn3.Click += BtnClick;
Btn4.Click += BtnClick;
}
这是我的按钮点击处理程序代码
private void BtnClick(object sender, EventArgs e)
{
Button button = (Button)sender;
var rnd = new Random();
var qa = new List<KeyValuePair<string, int>>();
qa.Add(new KeyValuePair<string, int>(ds.Tables[0].Rows[myNum]["CorrectAnswer"].ToString(), 1));
qa.Add(new KeyValuePair<string, int>(ds.Tables[0].Rows[myNum]["WrongAnswer1"].ToString(), 0));
qa.Add(new KeyValuePair<string, int>(ds.Tables[0].Rows[myNum]["WrongAnswer2"].ToString(), 0));
qa.Add(new KeyValuePair<string, int>(ds.Tables[0].Rows[myNum]["WrongAnswer3"].ToString(), 0));
var myQa = qa.OrderBy(c => rnd.Next()).Select(c => new { c.Key, c.Value }).ToList();
if (button.ID == "Btn1")
DA.TrackAnswer(1, 1, Convert.ToInt32(ds.Tables[0].Rows[myNum]["QandAID"].ToString()), Btn1.Text, myQa[0].Value);
if (button.ID == "Btn2")
DA.TrackAnswer(1, 1, Convert.ToInt32(ds.Tables[0].Rows[myNum]["QandAID"].ToString()), Btn2.Text, myQa[1].Value);
if (button.ID == "Btn3")
DA.TrackAnswer(1, 1, Convert.ToInt32(ds.Tables[0].Rows[myNum]["QandAID"].ToString()), Btn3.Text, myQa[2].Value);
if (button.ID == "Btn4")
DA.TrackAnswer(1, 1, Convert.ToInt32(ds.Tables[0].Rows[myNum]["QandAID"].ToString()), Btn4.Text, myQa[3].Value);
Btn1.Text = myQa[0].Key;
Btn2.Text = myQa[1].Key;
Btn3.Text = myQa[2].Key;
Btn4.Text = myQa[3].Key;
myNum = myNum + 1;
}
当页面加载时,它会从我的数据集中提取第一个问题,但是当我单击按钮选择我的答案时,按钮文本全部更改但问题保持不变,但是当我再次单击按钮时更改的问题开始工作。
我尝试在我的页面加载事件中使用 if(!postback) 并添加了 buttonclick 处理程序中的几乎所有内容,但问题仍然没有解决,直到我单击另一个然后它才正常。
我需要做的是加载问题和答案,只需单击一次答案按钮而不是两次即可开始测验。
我想我解释得对。
【问题讨论】: