Динамически добавленные параметры LinkButton CommandName/CommandArgument удаляются

Я пытаюсь реализовать панель разбивки на страницы над таблицей. У меня есть статический элемент <ul> на моей странице:

<div><center><ul id="topnav" runat="server"></ul></center></div>

В моем событии Page_Load я пытаюсь загрузить его с номерами страниц:

foreach ( int linkpage in linkpages ) {
  HtmlGenericControl li;
  LinkButton pbut;
  li = new HtmlGenericControl( "li" );
  pbut = new LinkButton();
  pbut.CommandName = "page";
  pbut.CommandArgument = linkpage.ToString();
  pbut.Text = linkpage.ToString();
  li.Controls.Add( pbut );
  topnav.Controls.Add( li );
}

Однако, когда элемент управления фактически отображается, он публикуется как имя «ctlXX» (где XX — увеличивающееся число) и без аргумента, поэтому я не могу получить номер страницы. Однако атрибут .Text отображается нормально. Что я делаю неправильно? Это совсем неправильный подход?


person Brandon    schedule 06.01.2012    source источник


Ответы (1)


Если вы динамически добавляете кнопки, вам нужно сделать это в методе Page_Init, иначе элемент управления не будет участвовать в ViewState. Может быть проблема. Конечно не поможет.

Кроме того, имя — это то, что .Net динамически присваивает кнопке, потому что вы сами не указали идентификатор. Это будет тот идентификатор, который виден в коллекции Request.Form, если это то место, где вы ищете.

Но, честно говоря, я думаю, что ваш подход неверен. Если вам нужна нумерация страниц, вам следует обратить внимание на что-то вроде элемента управления GridView или ListView, в который встроена нумерация страниц. Это было бы более стандартно, что делать. Объяснение разбиения на страницы GridView здесь и общее руководство по ListView, включая разбиение на страницы здесь.

Как правило, нумерация страниц — это проблема, которая несколько раз решалась в ASP.Net, и вы действительно не хотели бы изобретать велосипед — ну, я бы не стал. Кроме того, используя этот тип элементов управления сеткой, вы получите такие вещи, как сортировка из коробки — еще одно очень распространенное требование.

person Crab Bucket    schedule 06.01.2012