chiks kaso
chiks kaso

Reputation: 13

asp.net submit process

i have a form with 2 labels initializing random numbers and a text box to check if the answer is correct after adding the two random numbers. The problem i am having is SUBMIT processes the next set of random numbers and so the result is always incorrect. here is the code i have so far.

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

Upvotes: 1

Views: 138

Answers (3)

Mike Perrenoud
Mike Perrenoud

Reputation: 67918

Consider adding this code to PreRender:

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

and then in the Click grab the answer from Session like this:

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

and bear in mind I'm assuming that you actually want to generate new numbers on every post back with this answer.

Upvotes: 0

System Down
System Down

Reputation: 6270

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();
}

Upvotes: 0

Blachshma
Blachshma

Reputation: 17395

Use IsPostBack to only run the initializing code when the page is initially loaded:

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

Upvotes: 5

Related Questions