我建立了一个拥有游戏的网站。在游戏中,用户需要看到带有数字的标签,并在文本框中写入正确的数字并按下检查。当我用2个浏览器(chrome和iexplorer)打开网站时,会发生的是从第二个浏览器继续播放。
static int i = 0;
protected void Page_Load(object sender, EventArgs e)
{
number_lbl.Text = i + "";
}
protected void check_Click(object sender, EventArgs e)
{
if (Convert.ToInt16(textbox.Text) == i)
right_wrong_lbl.Text = "right";
else
right_wrong_lbl.Text = "wrong";
check.Enabled = false;
next.Visible = true;
}
protected void next_Click(object sender, EventArgs e)
{
i++;
check.Enabled = true;
next.Visible = false;
number_lbl.Text = i + "";
textbox.Text = "";
}
例如,我在chrome中打开网站并看到“0”,我写“0”并得到“正确”并点击“下一步”。我再试一次,看“1”,写“1”,然后“右”,点击“下一步”。现在我在iexplorer中打开网站,看到“0”,写“0”并得到“错误”,点击“下一步”并看到“4”。如果我在iexplorer中写了“3”,我就会“正确”。 我怎么能这样做,每个玩家的页面将在其他玩家的页面中独立?
答案 0 :(得分:3)
static
关键字导致了此问题。
将i的值存储在会话中。
负载:
if(Session["Number"]) == null)
{
Session["Number"] = 0;
number_lbl.Text = Session["Number"].ToString();
}
并用Session["Number"]
替换每次出现的i。
答案 1 :(得分:0)
您的用户不在静态环境中。 尝试将static int i更改为int i。
编辑:
抱歉,我的回答太快了。
如此处的另一个答案所述,您可以将其存储为会话变量: 试试这个(我现在没办法测试它,但它应该有效):
int i
{
get
{
if(Session["ClickCount"] == null)
{
Session["ClickCount"] = 0;
}
return int.Parse(Session["ClickCount"].ToString());
}
set
{
Session["ClickCount"] = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
number_lbl.Text = i + "";
}
protected void check_Click(object sender, EventArgs e)
{
if (Convert.ToInt16(textbox.Text) == i)
right_wrong_lbl.Text = "right";
else
right_wrong_lbl.Text = "wrong";
check.Enabled = false;
next.Visible = true;
}
protected void next_Click(object sender, EventArgs e)
{
i++;
check.Enabled = true;
next.Visible = false;
number_lbl.Text = i + "";
textbox.Text = "";
}