ASP.NET按钮按下不更新对象

时间:2016-11-04 20:35:31

标签: c# html asp.net .net visual-studio

List<Button> buttons { get; set; }
Queue<string> myQueue { get; set; }


public void AssignButton_Click(object sender, EventArgs e)
{     
    Button btn = sender as Button;
    OutputMessage.Text = "Clicked button: " + btn.Text;
    btn.BackColor = System.Drawing.Color.Red;
    btn.Text = myQueue.Dequeue();
}


//initialize buttons
foreach (Button b in Buttons_)
{
    if (b.Text.Equals("wait"))
    {
        if (myQueue.Count != 0)
        {
            b.Text = myQueue.Dequeue();
        }
        else
        {
           break;
        }
    }
}


myQueue = new Queue<string>();
myQueue.Enqueue("1");
myQueue.Enqueue("2");
...
myQueue.Enqueue("13");


Buttons_ = new List<Button>();
Buttons_.Add(Button1);
...
Buttons_.Add(Button9);

我有按钮,每次点击后都会更新。他们将填充一个数字。可以把它想象成一个儿童计数游戏,队列从1开始,然后变为100.我可以正确初始化按钮并可以访问数据,但对象不是更新,有什么想法吗?

2 个答案:

答案 0 :(得分:0)

由于您使用的是asp.net,因此队列的状态不会保存在响应中。换句话说,正在为每个按下按钮创建一个新队列,因此当您Dequeue时,它会返回"1",因为这是队列中的第一个字符串。如果您只需要更新号码,可以这样做:

int value;
if(int.TryParse(btn.Text, out value))
{
    btn.Text = (value + 1).ToString();
}

这假设您的按钮以整数值作为文本

开头

答案 1 :(得分:0)

myQueue是您的类成员,每次执行按钮单击回发时都会创建新的页面实例。因此,如果您想保留此队列,可以根据需要使用任何这些变量以多种方式执行此操作。

  1. ViewState
  2. 会话
  3. 缓存