【问题标题】:Keeping track of Turn By Using QueryString使用 QueryString 跟踪转弯
【发布时间】:2016-05-18 16:45:37
【问题描述】:

我正在尝试创建一个游戏;当我单击一个按钮时,我需要使用查询字符串转到另一个页面,我需要知道单击了哪个按钮(Button1),以及单击了多少次(Turn)。这是我的代码:

int Turn = 0;
protected void Button1_Click(object sender, EventArgs e) 
{
            string clickedButton = "Button1";
            Turn = Turn ++;
            Response.Redirect(string.Format("TheGame.aspx?button={0}&turn={1}", clickedButton , Turn)); 
}

但问题是,我永远无法改变轮到,它总是保持为 0。我该怎么做?

【问题讨论】:

  • 您只需要在每次页面刷新时读取查询中的Turn。该页面对服务器的每个请求都会在 0 处重新启动页面类中的 Turn 变量,您需要查看查询字符串并获取 current turn 值并存储到 Turn 变量中。跨度>

标签: c# asp.net query-string


【解决方案1】:

这是因为每当创建新页面时,Turn 都会设置为 0。 您应该将Turn 存储在 Session 中并像这样使用它:

public int Turn
{
    get
    {
        if (Session["Turn"] == null)
            Session["Turn"]= 0;
        return (int)Session["Turn"];
    }
    set
    {
        Session["Turn"] = value;
    }
}

【讨论】:

  • 我试过了,它奏效了!但是除了Session还有其他解决方案吗?
  • 你也可以使用cookie来存储Turn
  • 我该怎么做?有没有更简单的方法?我可以使用 ViewState 吗?
  • @Miss.Alpha 当然,你可以使用 ViewState
  • 但是由于我要去另一个页面,我该如何使用那个 ViewState?
【解决方案2】:

最简单的方法是让变量变成静态的,

static int Turn = 0;

这样就行了!

【讨论】:

    【解决方案3】:

    两个原因。

    首先,后置增量运算符返回增量之前的值,因此Turn++Turn 增量为 1,然后返回 0。然后将该值分配回 Turn,从而撤消增量。只需使用

    Turn++
    

    其次,TurnPage-class 级别声明。每次页面加载时,都会构建该页面的一个新实例,其中一个新的Turn 被初始化为零。

    您需要在您的解决方案中添加某种转向跟踪服务类,以跟踪用户在游戏生命周期中的转向。您还需要确定“游戏生命周期”的概念如何映射到服务器端的抽象概念。

    您可以像现在一样继续使用查询字符串,但您应该只使用局部变量、递增并使用新查询字符串返回新值,而不是启动页面级变量。另一种选择是会话状态。

    【讨论】:

    • 谢谢,我明白了!但是那些转弯跟踪服务类是什么?有什么例子吗?
    • @Miss.Alpha 这是你会写的东西,一个为 Turn 抽象提供一个接口的类,并封装了它内部管理的细节。在内部,它可能使用会话状态、查询字符串甚至数据库。不过,在您的情况下,这种代码抽象可能有点矫枉过正。您可以直接为Turn 使用任何底层存储并手动增加它。更广泛的一点是,您需要将“转向”视为一个想法,然后将该想法转化为代码。
    【解决方案4】:

    “++”运算符递增它附加到的变量。当用作这样的后缀时,它会检索现有值,然后递增变量。当用作前缀时,它增加变量,然后检索值。在这种情况下,它检索值“0”,然后将 Turn 递增到“1”。但是,分配随后会将 Turn 的值更改回“0”。

    要么单独使用Turn++,要么使用赋值Turn = Turn + 1,这就是我要做的。

    protected void Button1_Click(object sender, EventArgs e) 
    {
            string clickedButton = "Button1";
            Turn = Turn + 1;
            Response.Redirect(string.Format("TheGame.aspx?button={0}&turn={1}", 
                clickedButton , Turn)); 
    }
    

    “++”运算符经常这样使用:

    protected void Button1_Click(object sender, EventArgs e) 
    {
            string clickedButton = "Button1";
            Response.Redirect(string.Format("TheGame.aspx?button={0}&turn={1}", 
                clickedButton , ++Turn)); 
    }
    

    请注意,我使用“++”作为前缀,因此用于格式化字符串的值将是后增量值“1”,而不是前增量值“0”。

    【讨论】:

    • 非常感谢您对 ++ 的澄清,这次 Turn 坚持 1。
    • 那是因为你需要 @Arvin 的修复和这个。
    猜你喜欢
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多