Любой тег в 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(), нужно использовать:
Например:
<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.
Наследование runat работает для таких тегов форм как:
Например:
<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>
Все элементы этой формы будут иметь активный компонент после компиляции
Обратите внимание, что тег <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 требует наличия разрывающего тега для тех тегов формы, которые не содержат активного компонента, но не требует для других. Мы рекомендуем всегда использовать закрывающие теги для всех элементов формы, так как это поведение в будущем, возможно, изменится.
Обсуждение