我有一个表格,其中有两个标签初始化随机数和一个文本框,以便在添加两个随机数后检查答案是否正确。我遇到的问题是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 = "";
}
}
}
答案 0 :(得分: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;
}
}
答案 1 :(得分:0)
考虑将此代码添加到PreRender
:
protected override void OnPreRender(EventArgs e)
{
Session["Answer"] = lblAnswer.Text;
base.OnPreRender(e);
}
然后在Click
中抓住Session
的回答:
if (TextBox1.Text != Session["Answer"])
并牢记我假设您实际想要在每个帖子上生成新号码并回复此答案。
答案 2 :(得分: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();
}