2016-11-04 4 views
0
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. Я могу правильно инициализировать кнопки и получить доступ к данным, но объект не обновляется, никаких идей?ASP.NET кнопка не обновляет объект

ответ

0

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

  1. ViewState
  2. Session
  3. Печенье
+0

Спасибо! Все, что мне было нужно, это те идеи, чтобы знать, куда идти дальше. – Rob

0

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

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

Это при условии, что ваша кнопка начинается с целочисленным значением как текст

Смежные вопросы