【发布时间】:2014-02-27 17:14:57
【问题描述】:
我有一个ASP.Net 应用程序,它是一个简单的数字生成器。人们猜测,它告诉他们他们是否正确。我遇到的问题是为了防止randNum 在每次单击按钮以提交答案(页面重新加载)时发生变化,它被放置在Page.IsPostBack 语句中。问题是在此If 中生成的randomNum 在If 之外无法访问。
如何在保留原始 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