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

Я пытаюсь создать панель разбивки на страницы над таблицей. У меня есть статический элемент <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 отрисовывается нормально. Что я делаю неправильно? Это совершенно неправильный подход?

1 Ответ

1 голос
/ 07 января 2012

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

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

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

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

...