2017-01-19 17 views
0

У меня проблемы с динамическими ссылками на страницах asp. Я использую их для создания пользовательского поискового вызова для представления сетки. Идея состоит в том, что я хочу отображать их 20 примерно 20. Он работает в течение первых 20. Когда я их показываю, все в порядке. Затем я нажимаю следующий для отображения следующего 20. Когда я нажимаю дальше, он отображает меня, но если нажать кнопку, отличную от начальных 20, она будет меня в начале 20.Проблемы с запуском моего события для динамических ссылок в asp

Начальная страница:

override protected void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    if (this.Tag.Equals("Shareholder")) 
    { 
     InitComponents(false); 
    } 

    /// Must be done everytime the page loads. 
    InitializeList(); 

    if (!IsPostBack) 
     InitializeUI(); 
} 

Init кнопки ссылка

private void InitComponents(Boolean Prev) 
{ 
     PanelPager.Controls.Clear(); 
     int nrInregistrari = Convert.ToInt32(DAActionar.CountActionari(11, LastBtnIndex)); 
     if (Prev == true) 
     { 
      LinkButton lnkPrev = new LinkButton(); 
      lnkPrev.Text = "Prev"; 
      PanelPager.Controls.Add(lnkPrev); 
     } 

     int BtnDeAfisat = 0; 
     if (nrInregistrari > BTN_PER_SERIE * PAGE_SIZE) 
     { 
      BtnDeAfisat = BTN_PER_SERIE; 
     } 
     else 
      BtnDeAfisat = nrInregistrari/PAGE_SIZE + 1; 

     for (int index = 1; index <= BtnDeAfisat; index++) 
     { 
      int pageNo = index + LastBtnIndex; 
      LinkButton lnk = new LinkButton(); 
      lnk.Click += new EventHandler(PageChange); 
      lnk.ID = "PageLink" + pageNo.ToString(); 
      lnk.CommandName = "Page"; 
      lnk.Text = " " + pageNo.ToString() + " "; 
      lnk.CommandArgument = index.ToString(); 

      PanelPager.Controls.Add(lnk); 

     } 

     LinkButton lnkNext = new LinkButton(); 
     lnkNext.Click += new EventHandler(NextPage); 
     lnkNext.Text = "Next"; 
     PanelPager.Controls.Add(lnkNext); 
     LastBtnIndex += BtnDeAfisat; 


} 

событие для следующих кнопок

private void NextPage(object sender, EventArgs e) 
{ 
    InitComponents(true); 
} 

Паг Echange:

public void PageChange(object sender, EventArgs e) 
     { 
      int pageIndex = int.Parse((sender as LinkButton).CommandArgument) + 1; 
      object dataSource = GetDataSource(OwnerId, null, pageIndex); 
      PushData(dataSource); 

     } 
+0

«Затем я нажимаю следующий для отображения следующего 20. Когда я нажимаю дальше, он отображает меня, но если нажать кнопку, отличную от начальных 20, это будет мне в начале 20." Не удалось понять проблему, с которой вы столкнулись. Можете ли вы быть более наглядными. Что скажешь, когда вы нажимаете кнопку «кроме начальных 20»? Означает ли это, что вы не можете идти вперед после того, как вы достигнете 2-го номера на 20 страниц? –

+0

Можете ли вы поделиться кодом метода PageChange? –

+0

@Chetan edit, идея состоит в том, что первые 20 кнопок, которые инициализируются в init, работают правильно, другие не запускают обработчик событий. – user7383186

ответ

0

В ASP.NET только элементы управления, которые добавляются в рамках Page_Load будет иметь свои события приложенные и будут выполнены. Также, когда выполняется событие на стороне сервера, страница заходит сама назад, и во время этого выполняется сначала выполнение page_load, а затем выполняется код обработчика события.

Итак, ваш первый набор событий кнопки, выполненных совместно, они были прикреплены к событию как часть page_load. Теперь во время этой кнопки вы вызываете метод InitComponents. Так, как я объяснял во время события page_load, происходит первое, которое вызывает метод InitComponents, который добавляет кнопку на панель, но метод InitComponents снова выполняется как часть кода обработчика события, который удаляет элементы управления из Panel и повторно создает их и снова добавляет их в Panel.

Теперь, поскольку элементы управления, созданные во время второго выполнения метода InitComponents, не являются частью связанных с ними событий потока page_load, не стреляют, когда вы нажимаете на них. Он просто отправляет назад страницу, которая снова запускает InitComponents и создает новые элементы управления на панели, и они будут нормально работать, потому что они созданы как часть потока page_load.

Простите меня, если вас смущает.

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

У меня сейчас нет ничего работающего. Я нашел эту статью с рабочим примером кода, который вы можете рассмотреть в качестве примера и реализовать в своей работе.

http://www.aspsnippets.com/Articles/Implement-Paging-in-DataList-control-in-ASPNet.aspx

пример объясняет, как отображать номера страниц, а также как связать данные на основе выбранного номера страницы.