【问题标题】:How do I return one item at a time with each button click?如何在每次单击按钮时一次返回一个项目?
【发布时间】:2014-09-02 19:39:43
【问题描述】:

我在表单加载上方声明了一个数组:

protected string[] Colors = new string [3] {"red", "green", "orange"};

当我点击我的提交时,我想使用Response.Write(); 来打印第一次点击时的red,第二次点击时打印出green,最后一次点击时打印出orange。我正在阅读 How do I get next item in array with each button click? 并且该用户正在尝试与我正在尝试做的事情非常相似的事情,但是在这种情况下看起来数组是动态的。

【问题讨论】:

  • 这是嵌入在 ASP 中的(所以不允许状态)?
  • 您需要保留一个变量来计算点击次数
  • 听说过会话吗?
  • 您应该真正使用标记和代码,而不是直接写出响应流。使用起来要容易得多。

标签: c# arrays


【解决方案1】:

在会话中跟踪它

 protected void Page_Load(object sender, EventArgs e)
    {           
        int? count = Session["count"] as int?;
        count = (count == null) ? 0 : count;
        Response.Write(Colors[count.Value]);
        count = (count + 1) % Colors.Length;
        Session["count"] = count;
    }

【讨论】:

    【解决方案2】:

    您可以使用视图状态通过特定页面的请求/响应跟踪来跟踪某些信息。您可以在视图状态中存储一个索引,然后在单击按钮时使用该信息来查看应该打印到屏幕上的内容。

    【讨论】:

    • 可以在没有状态的情况下解决这个问题。每个请求都可能返回 Colors[0] 而不是 Colors = Colors.Skip(1).ToArray() 直到数组为空。对于所描述的问题,这是一个适当的解决方案。
    • @ValentinP。实例字段是为每个页面请求创建的,因此只会一遍又一遍地打印出第一项。
    • 好吧,我对 asp.net (?) 不是很熟悉。国家是邪恶的:)。
    • @ValentinP。严格来说,ViewState 不会在请求之间存储任何状态。它存储状态在请求中。
    【解决方案3】:

    仍在寻找解决方案,在这样做的同时看到这个弹出 这将获得您的按钮点击量:

    ViewState["count"] = Convert.ToInt32(ViewState["count"]) + 1;
    

    至于遍历数组,我仍在处理它。我只能显示数组中的最后一项。

    【讨论】:

      【解决方案4】:

      您必须在 ViewState 中存储点击次数,并在按钮的点击事件处理程序中将其增加一。

      private int NumberOfClicks
      {
         get { return (int)(ViewState["NumberOfClicks"] ?? 0 );
         set { ViewState["NumberOfClicks"] = value; }
      }
      
      
      protected void btn_Click(object sender, EventArgs e)
      {
         if(NumberOfClicks < colorArray.Length)
         {
                 //write to response colorArray[NumberOfClicks];
                 NumberOfClicks += 1;
         }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-29
        • 2012-02-16
        • 1970-01-01
        • 2015-09-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多