ASP.NET MVC

индекс
44,38

MVC 2: Строго типизированные Html-помощники

asp.net mvc 2Это первая часть из цикла статей о грядущих нововведениях в ASP.NET MVC 2, выход которого уже не за горами. Данный пост посвящен новым строго типизированным HTML-помощникам, добавленных в ASP.NET MVC 2.


Существующие Html-помощники


ASP.NET MVC шел вместе с набором HTML помощников, которые можно использовать в шаблонах вида, упрощая генерирование HTML UI. Например, для вывода тексового поля, вы можете написать код (в .aspx шаблоне вида), которые использует метод-помощник Html.TextBox():

image

Первый параметр метода-помощника принимает name/id текстового поля, второй — его value(значение). Метод-помощник сгенерирует HTML, вернув его браузеру:

image

Новые строго типизированные HTML-помощники


Одной из самых часто запрашиваемый возможностей второй версии была поддержка строго типизированных HTML-помощников, которые использую лямба-выражения, когда ссылаются на модели или модели вида, передаваемые в шаблон вида. Что позволяет производить проверку вида на момент компиляции, следовательно ошибки могут быть обнаружены не во время работы приложения. Также это улучшает поддержку intellisense в шаблона вида.

Теперь новые строго типизированные HTML-помощники являются неотъемлемой частью ASP.NET MVC 2. Данные методы используют правила именования по принципу «Html.HelperNameFor()». например: Html.TextBoxFor(), Html.CheckBoxFor(), Html.TextAreaFor() и т.п. Они подерживают лямбда-выражения для определения name/id и значения элемента.

Например, мы можем использовать новый помощник Html.TextBoxFor() в дополнение к Html.TextBox():

image

Заметьте, что нам не нужно больше определять строковый параметр «ProductName» — лямбда-выражения достаточно гибкие, чтобы мы могли возвращать оба имени свойства и поля в нашем объекте модели в дополнение к его значению.

В следствии строгой типизации HTML-помощника, мы получаем полную поддержку intellisense в Visual Studio, когда во время написания лямбда-выражений.

image

Сгенерированный HTML точно такой же, как у предыдущей показанной версии выше.

image

Список строго типизированных HTML-помощников, встроенных в ASP.NET MVC 2


HTML-помощники для элементов:
  • Html.TextBoxFor()
  • Html.TextAreaFor()
  • Html.DropDownListFor()
  • Html.CheckboxFor()
  • Html.RadioButtonFor()
  • Html.ListBoxFor()
  • Html.PasswordFor()
  • Html.HiddenFor()
  • Html.LabelFor()
Другие помощники:
  • Html.EditorFor()
  • Html.DisplayFor()
  • Html.DisplayTextFor()
  • Html.ValidationMessageFor()
Я расскажу о новых помощниках Html.EditorFor() и Html.DisplayFor() в следующей части, когда затрону тему auto-scaffold функциональности в ASP.NET MVC 2. Мы так же воспользуемся помощником Html.ValidationMessageFor(), когда рассмотрим тему валидации.

Строго типизированные HTML-помощники и scaffolding


Теперь VS 2008 и VS 2010 по умолчанию используют новые строго типизированные HTML-помощники, когда создает новый строго типизированные шаблоны вида, используя команду «Add View».

Например, давайте представим, что у нас есть простой класс «ProductsController», у которого метод действия «Edit», который в свою очередь генерирует форму редактирования для модели «Product»:

image

Мы можем нажать правой кнопкой по методу действия Edit в Visual Studio и выбрать пункт «Add View», для создания шаблона вида. Мы выберем создание «Edit» шаблона, через scaffolding, используя объект Product:

image

С ASP.NET MVC 2 шаблон вида, который создается по умолчанию, используя новые строго типизированные HTML-помощники для ссылки на объект модели Product:

image

Выводы


Новые строго типизированные HTML-помощники в ASP.NET MVC 2 предоставляют возможность получить улучшения: безопасность типов в ваших шаблонах вида, а также проверку вида на момент компиляции и поддержку intellisense, во время редактирования ваших шаблонов в Visual Studio.
+6
12 января 2010, 14:52
8

комментарии (20)

–5
woworks #
Html-помощники? виды? обожемой… думаю не стоило это так буквально переводить
–1
jeje #
если вид иногда может трактоваться не так, то помощник это правильный не конфликтующий перевод по смыслу.
0
Source #
Иногда наиболее ясной бывает калька с английского, например «вьюха» вместо «представление», «вид».
А «помощник» действительно вполне нормально смотрится, как впрочем и «хелпер» :-)
0
jeje #
Я поэкспериментирую в следующих переводах в таких спорных местах.
+2
Gangsta #
Когда же это прекратится? Не успеешь одно изучить, уже другое появилось. Вот Postgres SQL за мою карьеру IT'шника сменился только с 7 версии на 8. А .NET за 4 года с 1.1 до 4.
+1
dmomen #
Если продукт улучшается — на здоровье! Чем быстрее — тем лучше.
0
DonSleza4e #
Да и в наше время — не будешь на гребне волны прогресса, тогда будешь вечно отстающим от конкурентов
0
Dale #
В общем то тут не про .NET, а про технологию основаную на .NET

Кстати, никогда не понимал этого недовольства быстрым развитием дотнета. Такое ощущение, что самые недовольные это те, кто постоянно на нём не пишет. Во всяком случае, все C# программисты, с которыми я общаюсь только рады тому, что фреймворк идёт в ногу со временем.
+2
Gangsta #
Постоянно не пишет — это не про меня. Я сертифицированный разработчик (MCAD) с 2005 года, .NET использую уже довольно давно, много чего на нем сделал, работал ведущим программистом и архитектором ПО.

Только смысла изучать новый MVC 2 не вижу, скоро выйдет какой-нибудь MVC 8 и скажут что-то вроде "а вот в MVC N был такой неудобный тип, приходилось все время писать так-то, а сейчас мы переделали полностью логику, и теперь надо писать вот так". Так уже много раз и было. В итоге сейчас все знания по ASP.NET уже устарели и оказались не нужны. Если это произошло один раз, то может произойти еще.
0
Dale #
Написал длинный комментарий и случайно закрыл вкладку, бывает же.

Если суммировать: у меня тоже MCTS, пишу ежедневно, новые фишки .NET(и ASP.NET MVC в частности) реально помогают жить, vanilla ASP.NET никто не отменял.
0
outcoldman #
а я MCPD с прошлого года :P

В общем согласен с вами обоими, во первых тяжело когда появляется много всего, быть в курсе нового просто тяжело, нужны постоянные сравнения, а выделять время на сравнения особо не хватает… Просто .NET постоянно развивающаяся технология, пока не имеющая особые грани, но когда то темп и рост должен приостановиться, сейчас же .NET просто, кажется, догоняет и вытесняет конкурентов. Вроде как EF появившийся в .NET, он явно был плох прошлой версии, но уж очень, наверняка, хотелось просто, чтобы было.

Но с другой стороны, действительно, новое бывает уж очень полезно.
+1
AigizK #
есть простое правило, как только выходит вторая версия надо изучить эту технологию. Заметил что, после первый версии во второй много изменений, а вот дальше ни так уж и много.
0
Dale #
Мне кажется нужно учиться отсеивать ненужную информацию.
Если, например, не занимаешься вебом, то в общем-то необязательно читать все новости и статьи посвящённые asp.net (mvc). Читай про то, чем реально занимаешься, ну и плюс что-нибудь для интереса, функциональщину например или наоборот лоу-левел. За всем и правда не уследишь, а нужно ли? Когда реально понадобиться — сможешь наверстать.
0
AigizK #
Раз уж затронули тему HtmlHelper то надо было довести до конца, а именно:
1. упомянуть про шаблонизируемые помощники — это когда вы можете переопределить скажем Html.TextBoxFor, чтоб он возвращал календарик, когда передаем тип дату
2. раньше если надо было создать через HtmlHelper кукую нибудь разметку, приходилось генерить их через TagBuilder, а теперь можно создать *.ascx и возвращать его
0
jeje #
Это перевода Скотта Гу и это не конец, вот список ожидаемых статей
0
AigizK #
<зануда>Напишите под статьей что это перевод, и источник на оригинал</зануда>
+1
jeje #
Ты тут 2 года и до сих пор не выучил как оформляются переводы? :D
1.в заголовке статьи
2.в конце рядом с ником автора статьи.
Мы люди серьезные, все копирайты соблюдаем ;)
0
AigizK #
ой, заработался, пошел спать :)
–1
egorinsk #
Создавать виды через GUI-диалоги и мастера —несерьезно как-то.
0
Dale #
Диалог создаёт для тебя шаблон по умолчанию, только и всего. Дальше всё ручками.

Обычно, кстати, в поле View Content выбирается Empty, чтобы он только прописал master.page, тип модели, если она есть и contentplaceholder'ы. Зачем это каждый раз руками набирать?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.