Инструменты пользователя

Инструменты сайта


limb3_2007_2:ru:usage:wact:form_tags

Теги форм с активными компонентами или без

Роль атрибута runat

Любой тег в WACT шаблоне при желании может иметь активный компонент фазы выполнения. Для этого существует специальный атрибут runat, который должен иметь значение «server», чтобы активизировать создание активного компонента. Для специальных WACT-тегов, таких как <core:datasource>, <list:list> этот атрибут автоматически ставится в значение server. А для обычных HTML-тегов, типа <a>, <img> и т.д. значение этого тега по-умолчанию равно client, что значит этот тег не имеет активного компонента.

Теги форм - особый случай: иногда они требуют активного компонента, а иногда нет, например:

<!-- Это обычная форма, HTML тег. Компилятор ее пропустит-->
<form id="MyFormA">
    <!-- ... -->
</form>
 
<!-- Эта форма будет дополнена активным компонентом, так как содержит атрибут runat="server" -->
<form id="MyFormB" runat="server">
    <!-- ... -->
</form>

Активные компоненты для тегов элементов форм

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

Для форм введен дополнительный механизм именования тегов, который дополнительно использует атрибут «name» (обычно используется для идентификации тегов <input>).

Для идентификации компонентов формы используются несколько видоизмененные правила. Итак, для того, чтобы получить какой-либо компоненты формы, например, при помощи метода WactTemplate :: getChild(), нужно использовать:

  • Значение атрибута ID, если он установлен.
  • Значение атрибута name, если атрибут id не установлен.
  • Если атрибуты ID и name не указаны, то WACT сгенерирует идентификатор случайным образом, поэтому идентификатор «угадать» будет сложно.

Например:

<form id="MyForm" runat="server">
 
   <!-- Уникальный идентификатор id="Input1" -->
   <input type="text" id="Input1" name="foo"/>
 
   <!-- Уникальный идентификатор id="bar" -->
   <input type="text" name="bar"/>
 
   <!-- Какое либо сгенерированное значение, например id="1003" -->
   <input type="text"/>
</form>

Наследование значения атрибута runat="server"

Если форма содержит несколько элементов и является тегом с активным компонентом, тогда все элементы формы будут также иметь активные компоненты. Это называется наследование значения атрибута runat.

Наследование runat работает для таких тегов форм как:

  • <input>
  • <label>
  • <select>
  • <textarea>

Например:

<form id="MyForm" runat="server">
 
<label for="name">Name:</label> <input type="text" value="name"/>
<br />
 
<label for="email">Email:</label> <input type="text" value="email"/>
<br />
 
<input type="submit"/>
 
</form>

Все элементы этой формы будут иметь активный компонент после компиляции

Отмена наследования runat атрибута

Обратите внимание, что тег <input type=«submit»/> в примере также будет иметь активный компонент, что совсем не обязательно, а иногда даже ошибочно.

Есть два способа «отключить» наследование значения атрибута runat=«server».

Наследование может быть отключено совсем при помощи атрибута children_reuse_runat=«false» тега <form>, например, так:

<form id="MyForm" runat="server" children_reuse_runat="false">
 
<!-- Ни один из этих тегов не будет зарегистрирован как компонент фазы исполнения -->
 
<label for="name">Name:</label> <input type="text" value="name"/>
<br>
 
<label for="email">Email:</label> <input type="text" value="email"/>
<br>
 
<input type="submit"/>
 
</form>

Другой способ, это указать другое значение атрибута runat, то есть runat=«client» или же поместить его в тег CoreLiteralTag, например:

<form id="MyForm" runat="server">
 
<!-- Эти теги отнаследуют runat='server' -->
<label for="name">Name:</label> <input type="text" value="name"/>
<br>
<label for="email">Email:</label> <input type="text" value="email"/>
<br>
 
<!-- Этот не будет содержать компонента фазы исполнения. Более правильный способ -->
<input type="submit" runat="client"/>
 
<!-- Этот также не будет содержать компонента фазы исполнения -->
<core:literal>
<input type="reset"/>
</core:literal>
 
</form>

Обратите внимание, что WACT требует наличия разрывающего тега для тех тегов формы, которые не содержат активного компонента, но не требует для других. Мы рекомендуем всегда использовать закрывающие теги для всех элементов формы, так как это поведение в будущем, возможно, изменится.

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
 __  __ ______   _  __  ____    __  ___
 \ \/ //_  __/  | |/_/ / __ \  /  |/  /
  \  /  / /    _>  <  / /_/ / / /|_/ / 
  /_/  /_/    /_/|_|  \___\_\/_/  /_/
 
limb3_2007_2/ru/usage/wact/form_tags.txt · Последние изменения: 2010/11/10 10:02 (внешнее изменение)