2016-06-21 2 views
2

Не могли бы вы помочь мне понять, почему, когда страница сначала загружается приведенным ниже примером, кнопки не работают, как предполагалось, например, кнопка 2 не вызывает GetItems(int.Parse("2"), 3);, а скорее звонит GetItems(int.Parse("4"), 3);, однако после первая обратная передача всех кнопок работает правильно, например Buttonx называет GetItems(int.Parse("x"), 3); Благодаряповедение postbacks linkbuttons по сравнению с не postback

protected void Page_Load(object sender, EventArgs e) 
      { 
       if(!IsPostBack) 
       { 
        GetItems(1, 2); //default values (first time the page is loaded) 

       } 
       GenerateButtons(5); 
      } 

private void GenerateButtons(int c) 
     { 
      LinkButton[] x = new LinkButton[c]; 

      for(int i=0; i<c;i++) 
      { 
       x[i] = new LinkButton(); 
       x[i].Text = (i+1).ToString(); 
       Panel1.Controls.Add(x[i]); 

       x[i].OnClick += new EventHandler(Button_Click); 

      } 
     } 
protected void Button_Click(object sender, EventArgs e) 
     { 
      Button button = (Button)sender; // Which button was clicked; 

      GetItems(int.Parse(button.Text), 3); //3 is a constant; first argument is index of button extracted from its caption 

     } 

PS. когда я обращаюсь к кнопке 1, я имею в виду button[0]. button2=button[1] и так далее. после обратной передачи button1 правильно подключен к событию, чтобы вызвать GetItems(1,3). Перед кнопкой postback1 запускается GetItems(3,3). Не по назначению

+0

используйте 'Page_Init', поэтому он будет работать при первой загрузке –

+0

Спасибо, это сработало! – Halle

+0

Я опубликовал его как ответ, надеюсь, что вы его отметили. :) –

ответ

2

Используйте Page_Init поэтому он будет работать на первая нагрузка

protected void Page_Init(object sender, EventArgs e) 
{ 
    GenerateButtons(5); 
} 

Источник: https://msdn.microsoft.com/en-us/library/ms178472.aspx

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

.

1

При динамическом создании элементов управления вы делаете это в Page_PreInit не Page_Load

protected void Page_PreInit(object sender, EventArgs e) 
{ 
GenerateButtons(5); 
} 

Эта статья объясняет и поможет вам

http://www.robertsindall.co.uk/blog/dynamically-adding-web-controls/

+0

Спасибо старателю. Просто попробовал это, но тогда кнопки недоступны при первой загрузке страницы. Мне нужно, чтобы они работали в обоих случаях. – Halle

+0

Вы переместили код 'Page_Load'? – prospector

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