Asp.net提交进程

本文关键字:进程 提交 net Asp | 更新日期: 2023-09-27 18:05:54

我有一个表单与2个标签初始化随机数和一个文本框,以检查是否添加两个随机数后的答案是正确的。我遇到的问题是提交处理下一组随机数,因此结果总是不正确。以下是我目前编写的代码。

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

Asp.net提交进程

使用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;
  }
}

问题来了。每次页面加载时,都加载新的随机数。这就是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();
}

考虑将此代码添加到PreRender:

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

然后在Click中像这样从Session中获取答案:

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

并记住我假设您实际上希望上生成每个回复此答案的新数字