Шрифт:
new { action = "hello", id = 1 });
В результате будет создана следующая ссылка, при условии, что маршрут SomeRoute определен как mycontroller/{action}/sometext/{id}.
<a href="#">Сcылка</a>
Элементы управления HTML-страницы
Большая часть вспомогательных методов, приведенных в табл. 5.1, связаны с созданием HTML-разметки для элементов ввода данных HTML-форм. В этой части главы мы рассмотрим их применение.
HTML-форма
Для того чтобы данные, введенные пользователем в элементы управления, были корректно отправлены на сервер и обработаны ожидающим этих данных действием контроллера, необходимо создать тег <form>, для этого существует вспомогательный метод Html.BeginForm(действие контроллера, имя контроллера). Если при вызове метода не указаны параметры, атрибут action тега <form> будет заполнен текущим URL.
<% using(Html.BeginForm("About", "Home")){ %>
<% } %>
В примере используется синтаксис using{}. Дело в том, что метод Html.BeginForm возвращает объект, реализующий интерфейс IDisposable. Метод Dispose этого объекта определен таким образом, чтобы выводить закрывающий тег формы </form>. Вместо синтаксиса using{} можно воспользоваться вспомогательным методом Html. EndForm.
<% Html.BeginForm("About", "Home"); %>
<% Html.EndForm ; %>
Синтаксис using{} удобнее при наличии нескольких независимых форм на странице — в этом случае формы будут выглядеть визуально обособленно.
При отображении представления будет создана соответствующая разметка для тега <form>.
<form action="/Home/About" method="post">
</form>
В случае необходимости задать дополнительные параметры URL, по которому будут отправлены данные формы, необходимо передать анонимный объект, свойства которого будут преобразованы в пары ключ-значение. Для определения метода отправки формы, в качестве параметра нужно передать значение перечислимого FormMethod.
<% using (Html.BeginForm("About", "Home",
new { hello = "world", answer = 42 }, FormMethod.Get )) { %>
<% } %>
Эти параметры будут использованы при генерации тега <form>.
<form action="/Home/About?hello=world&answer=42" method="get">
</form>
Текстовые поля, скрытые поля и кнопки
Вспомогательные методы для генерации текстовых полей, скрытых полей и кнопок работают по общему принципу — первым параметром передается идентификатор, который будет использован для создаваемого HTML-элемента и на основании которого сопоставляется значение элемента управления и создается пара ключ-значение при отправке данных формы на сервер.
<%= Html.TextArea("myText", "Hello world!") %>
В отличие от метода Html.BeginForm, выводящего строковые значения непосредственно в выходной буфер ответа пользователю, вспомогательные методы элементов управления возвращают строку, поэтому для них нужно использовать синтаксис <%= %>. Тогда в разметку страницы будет выведена соответствующая строка.
<textarea cols="20" id="myText" name="myText" rows="2">
la-la-la-la-la-la-la</textarea>
Для создания дополнительных атрибутов вспомогательным методам необходимо передать анонимный объект.
<%= Html.TextBox("myTextBox", "", new { style="color: yellow;",
@class="helloWorld" })%>
Поскольку в качестве имени свойства анонимного объекта нельзя использовать зарезервированные ключевые слова языка C#, то перед такими именами свойств нужно добавить символ @. В результирующий вывод свойство @class войдет как class, без символа @.
<input class="helloWorld" id="myTextBox"
name="myTextBox" style="color: yellow;" type="text" value="" />
Особым случаем является вспомогательный метод Html.CheckBox, поскольку он создает два HTML-элемента управления. Непосредственно элемент "флажок" и "скрытое поле".
<%= Html.CheckBox("myCheckBox", true) %>
Поскольку в случае если элемент управления не будет отмечен пользователем, то его значение на сервер не передается, поэтому необходимо использование скрытого поля.