2013-03-26 21 views
1

我有一個2個標籤的表單初始化隨機數和一個文本框,以檢查添加兩個隨機數後的答案是否正確。我遇到的問題是SUBMIT處理下一組隨機數,所以結果總是不正確的。這是我迄今爲止的代碼。asp.net提交過程

namespace _2ndGradeMath 
{ 

    public partial class Default : System.Web.UI.Page 
    { 
     Random random = new Random(); 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      lblNum1.Text = random.Next(0, 10).ToString(); 
      lblNum3.Text = random.Next(0, 10).ToString(); 
      int num1 = int.Parse(lblNum1.Text); 
      int num2 = int.Parse(lblNum3.Text); 
      lblAnswer.Text = (num1 + num2).ToString(); 
      lblAnswer.Visible = false; 
     } 

     protected void Button1_Click(object sender, EventArgs e) 
     { 
      if (TextBox1.Text != lblAnswer.Text) 
      { 
       Button1.Attributes.Add("onClick", "javascript:alert('Incorrect');"); 
      } 

      else if (TextBox1.Text == lblAnswer.Text) 
      { 
       Button1.Attributes.Add("onClick", "javascript:alert('Correct');"); 
      } 

      TextBox1.Text = "";   
     } 
    } 
} 
+0

如果答案正確,您需要做什麼?你可以使用customvalidator嗎? – Tim 2013-03-26 19:09:01

+0

在每次回發時,整個頁面生命週期都會被處理,「Page_Load」是它的一個步驟。爲了避免每次都改變這個值,用'if(!this.IsPostBack){...}'塊在'Page_Load'中包裝這個代碼。 – 2013-03-26 19:10:45

+0

頁面處理後,我有一個警告消息,顯示答案是否正確或不正確。 – 2013-03-26 19:14:17

回答

5

使用IsPostBack運行僅當頁面初始加載的初始化代碼:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack)  
    { 
     lblNum1.Text = random.Next(0, 10).ToString(); 
     lblNum3.Text = random.Next(0, 10).ToString(); 
     int num1 = int.Parse(lblNum1.Text); 
     int num2 = int.Parse(lblNum3.Text); 
     lblAnswer.Text = (num1 + num2).ToString(); 
     lblAnswer.Visible = false; 
    } 
} 
+0

+1 - 這是更合適的答案***如果***新數字不應該在每個帖子後面生成。 – 2013-03-26 19:10:01

+0

我以前試過,但這不允許生成新的數字。 – 2013-03-26 19:17:55

+0

這一切都取決於*當你想要生成新的數字時......你可以隨時再次調用Random。但是如果你在檢查之前的值之前*重新生成它們,你將永遠得不到正確的答案 – Blachshma 2013-03-26 19:19:11

0

考慮將此代碼添加到PreRender

protected override void OnPreRender(EventArgs e) 
{ 
    Session["Answer"] = lblAnswer.Text; 
    base.OnPreRender(e); 
} 

,然後在ClickSession這樣得到答案:

if (TextBox1.Text != Session["Answer"]) 

,並考慮熊我假設,你實際上產生新的號碼每後回到這個答案。

+0

對!我希望頁面能夠生成新的數字,就像這種情況一樣。謝謝! – 2013-03-26 19:15:25

+0

@chikskaso,那麼這應該爲你工作。在呈現頁面之前,您抓取新的答案,並在加載和呈現之間利用前一個帖子後面的值。 – 2013-03-26 19:21:00

+0

好的!非常感謝邁克爾。我試圖按照你的建議來解決問題。 – 2013-03-26 19:42:47

0

問題出在這裏。每次頁面加載時,您正在加載新的隨機數字。這就是Page_Load函數的作用:它每次頁面加載時都會運行,每次頁面提交時都會加載。因此,當用戶按下提交時,新的隨機數字被分配,這使得他的答案錯誤。您只需要在兩個實例中分配隨機數:

首先,頁面首次加載時。這可以通過檢查屬性IsPostBackis false來完成。

protected void Page_Load(object sender, EventArgs e) 
{ 
     if(!IsPostBack){ 
      lblNum1.Text = random.Next(0, 10).ToString(); 
      lblNum3.Text = random.Next(0, 10).ToString(); 
     } 
. 
. 
. 
} 

二,當用戶回答正確時。

else if (TextBox1.Text == lblAnswer.Text) 
{ 
     Button1.Attributes.Add("onClick", "javascript:alert('Correct');"); 
     lblNum1.Text = random.Next(0, 10).ToString(); 
     lblNum3.Text = random.Next(0, 10).ToString(); 
} 
+0

我在做其他一些事情是錯的。不應該使用那個onclick javascript警報。事實證明,它只是根據正在執行的代碼行提供警報,所以即使響應錯誤,但正在執行的行顯示「正確」,正是它所使用的,對於不正確的響應也是如此。這次我帶着一個標籤,它工作得很好。非常感謝您的幫助。 – 2013-03-27 03:11:52