ASP.NET нажатие кнопки не обновляет объект

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 ответа

  1. Так как вы используете asp.net состояние очереди не сохраняется в ответах. Другими словами, новая очередь создается для каждого нажатия кнопки, поэтому , когда выDequeue, она возвращается"1", так как это первая строка в очереди. Если вам просто нужно обновить номер, вы можете сделать это:

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

    Это предполагает, что ваша кнопка начинается с целочисленного значения в виде текста

  2. myQueue является членом вашего класса, каждый раз, когда вы нажимаете кнопку postback происходит и новый экземпляр страницы создается. Поэтому, если вы хотите сохранить эту очередь, вы можете сделать это несколькими способами, используя любую из этих переменных в зависимости от вашего требования.

    1. состояние представления
    2. Сессия
    3. Файлы cookie