2013-03-26 20 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