Лучший серверный контроль для окружающих блоков

Мне интересно, какие элементы управления сервером обычно используют люди для окружения и разделения блоков связанных элементов управления и содержимого в сценарии веб-форм. Часто мне нужно окружить блок HTML и связанных серверных элементов управления «панелью», которую я могу показать или скрыть на основе некоторой логики пользовательского интерфейса в коде. Я обычно сталкиваюсь с использованием Panel, однако это не работает, если мне нужно окружить несколько TR в таблице, например, потому что Panel отображается как div, который недействителен внутри тега Table. В этой ситуации я обычно просто устанавливаю каждый TR для запуска сервера и показываю / скрываю каждый из них по отдельности, но должен быть способ лучше. Я видел элемент управления PlaceHolder, используемый для этого сценария, но хотел знать, делает ли кто-нибудь это или есть какие-либо другие предложения.


person cfbarbero    schedule 22.10.2008    source источник
comment
Не могли бы вы привести пример того, о чем говорите? Я не понимаю, почему вы хотите переключать строки таблицы ...   -  person Mike C.    schedule 22.10.2008
comment
переключение строк таблицы достаточно просто ... просто дайте tr runat = server и идентификатор ... Ему нужен общий способ переключения элементов управления, который в конечном итоге не генерирует никакого HTML.   -  person Ben Scheirman    schedule 22.10.2008


Ответы (4)


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

Панели отлично подходят для тех случаев, когда результирующий div будет работать нормально. PlaceHolder наследуется от Control вместо WebControl, поэтому вы можете аргументировать, что он использует меньше накладных расходов. Когда у меня есть таблица, и мне нужно скрыть отдельную строку таблицы, у меня нет никаких проблем с добавлением id и runat = "server" в tr.

Или, когда мне нужно создать отличную большую таблицу элементов управления редактора (это подходит в 90% случаев, когда я хотел бы скрыть одну строку таблицы), я даже сделал элемент управления, который автоматизирует часть разметки для меня. . Этот элемент управления автоматизирует текст заголовка поля, независимо от того, делать ли его полужирным (обязательно), добавляет всплывающую подсказку с всплывающей подсказкой, и все, что мне нужно добавить вручную, - это текстовое поле или другой элемент управления редактора. Положительный побочный эффект заключается в том, что мой настраиваемый элемент управления дает мне идентификатор, который я также могу установить для Visible.

person David Boike    schedule 23.10.2008

Даже с элементом управления PlaceHolder Visual Studio будет жаловаться на то, что у вас нет действительного HTML.

Вы можете стиснуть зубы и сделать это с помощью блоков кода на стороне сервера, которые обращаются к свойствам кода позади:

<table>
  <tr>
     ....
  </tr>

  <% if( ShowSecretRow ) { %>

  <tr>
    <td>shhh!</td>
  </tr>

  <% } %>
</table>

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

person Ben Scheirman    schedule 22.10.2008

Возможно буквальный контроль.

person Joel Coehoorn    schedule 22.10.2008
comment
Поправьте меня, если я ошибаюсь, но я не думаю, что вы можете поместить объемный HTML в литерал, если вы не установите его в свойстве text. Я думаю, если вы попытаетесь заключить кучу HTML в .ascx или .aspx с помощью ‹asp: literal ...› HTMLHERE ‹/ asp: literal›, вы получите ошибку. - person cfbarbero; 22.10.2008

Вы можете использовать любой элемент html, который хотите, просто дайте ему идентификатор и сервер runat. Это дает вам некоторую гибкость.

person Mark Brackett    schedule 22.10.2008
comment
Да, но меня интересует элемент управления, который не отображается как HTML. Я знаю, что могу использовать любой элемент HTML, но в примере отображения / скрытия нескольких tr в таблице я хотел бы, чтобы только один элемент управления устанавливал видимость, а не каждый tr. - person cfbarbero; 22.10.2008