【问题标题】:Pass a variable from inside an IF to the ELSE将 IF 内部的变量传递给 ELSE
【发布时间】:2014-02-27 17:14:57
【问题描述】:

我有一个ASP.Net 应用程序,它是一个简单的数字生成器。人们猜测,它告诉他们他们是否正确。我遇到的问题是为了防止randNum 在每次单击按钮以提交答案(页面重新加载)时发生变化,它被放置在Page.IsPostBack 语句中。问题是在此If 中生成的randomNumIf 之外无法访问。

如何在保留原始 randomNum 的同时让该变量可访问我的代码的其他区域?我想使用IsPostBack

protected void btnGuess_Click(object sender, EventArgs e)
{
    if (Page.IsPostBack == false) //the code only runs once when the form is loaded.
    {
        Random myGenerator = new Random();
        myGenerator = new Random();
        int randomNum = myGenerator.Next(1, 50);
     }
        else //code can always run
        {
            int guessedNum = Convert.ToInt32(txtGuess.Text);

            if (guessedNum < randomNum)
            {
                MessageBox.Show("No. Low.");
                txtGuess.Text = "";
            }
            else if (guessedNum > randomNum)
            {
                MessageBox.Show("No. High.");
                txtGuess.Text = "";
            }
            else
            {
                MessageBox.Show("Yes");
                txtGuess.Text = "";
            }
        }
}

另外,我尝试存储变量,如下所示:

HttpContext.Current.Session["RANDOM"] = randomNum;

并将其传递给 else 为:

int randomNum = Convert.ToInt32(HttpContext.Current.Session["RANDOM"]);

但这样做总是会导致值为 0。

这是唯一需要使用该变量的页面。它不需要跨页面传递,只需函数即可。

【问题讨论】:

  • 永远不要在会话中存储这样的东西,并尽量避免会话。将 randomNum 变量移到 if 条件之外。就这么简单,或者如果您需要在其他代码区域访问它,请将其移动以使其成为全局变量(即在您的类声明之后
  • @Ahmedilyas 他在问如何让它跨请求访问。
  • 全局变量不会在回发时保持填充。您需要使用会话或视图状态。
  • 如果移到if语句之外,每次重新加载页面(用户点击按钮)时都会重新运行random函数,并且随机数会不断变化。这不是我们想要的功能。
  • 问题是 IsPostback 检查不属于按钮单击事件。它始终是按钮单击事件中的回发。

标签: c# asp.net if-statement random


【解决方案1】:

Page.IsPostBack 不属于按钮单击事件。它需要添加到 Page_Load。 你现在拥有它的方式,它总是会打击其他人。即,它始终是按钮单击中的回发。

protected void btnGuess_Click(object sender, EventArgs e)
{
        int randomNum = Convert.ToInt32(HttpContext.Current.Session["RANDOM"]);
        int guessedNum = Convert.ToInt32(txtGuess.Text);

        if (guessedNum < randomNum)
        {
            MessageBox.Show("No. Low.");
            txtGuess.Text = "";
        }
        else if (guessedNum > randomNum)
        {
            MessageBox.Show("No. High.");
            txtGuess.Text = "";
        }
        else
        {
            MessageBox.Show("Yes");
            txtGuess.Text = "";
        }
    }

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack == false) //the code only runs once when the form is loaded.
    {
        Random myGenerator = new Random();
        myGenerator = new Random();
       int randomNum = myGenerator.Next(1, 50);
       HttpContext.Current.Session["RANDOM"] = randomNum;
    }
}

【讨论】:

  • 工作得很好。我刚刚学会了使用会话来传递变量,所以这也有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2016-12-01
相关资源
最近更新 更多