1

我有一个带有 2 个标签的表单,用于初始化随机数和一个文本框,用于在添加两个随机数后检查答案是否正确。我遇到的问题是 SUBMIT 处理下一组随机数,因此结果总是不正确的。这是我到目前为止的代码。

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 = "";           
        }
    }
}
4

3 回答 3

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;
  }
}
于 2013-03-26T19:08:58.073 回答
0

Here's the problem. You are loading new random numbers each time the page loads. That's what the Page_Load function does: it runs each time the page loads which includes every time the page is submitted. So when a user presses submit new random numbers are assigned, which makes his answer wrong. You need to assign random numbers in only two instances:

First, when the page loads for the first time. Which can be done by checking the property 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();
      }
.
.
.
}

Second, when the user answers correctly.

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();
}
于 2013-03-26T19:12:48.607 回答
0

考虑将此代码添加到PreRender

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

然后像这样Click抓住答案Session

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

请记住,我假设您实际上希望每个回帖中使用此答案生成新数字。

于 2013-03-26T19:09:31.357 回答