HTML помощники MVC


5 0

 

А ты пользуешься HTML помощниками? Теоретически они действительно полезны, например, вот так может выглядеть на MVC код создания тяга <form>: 

@using (Html.BeginForm("Search", "Home", FormMethod.Get)) 

{

 <input type="text" name="q" /> 

 <input type="submit" value="Search" />

}

Помощник Html.BeginForm создаст за нас сам тег, обратиться к таблице route приложения, чтобы узнать, каким должен быть URL для атрибута action, чтобы попасть в контролер Home и метод Search и заполнит все сам. 

 

 

Неужели так сложно написать тег <form> самому? В принципе не сложно, но если хочешь, чтобы URL определялся в соответствии с таблицей маршрутов route, то придется писать кучу кода: 

@{ 

  var context = this.ViewContext.RequestContext; 

  var values = new RouteValueDictionary{ 

   { "controller", "home" }, { "action", "index" } 

  }; 

  var path = RouteTable.Routes.GetVirtualPath(context, values); 

 

<form action="@path.VirtualPath" method="get"> 

 <input type="text" name="q" /> 

 <input type="submit" value="Search2" /> 

</form>

Когда я впервые все это увидел, то первая мысль, которая проскочила в голове - а почему бы просто не прописать адрес прямо в поле action: 

<form action="/Home/Search" method="get"> 

 <input type="text" name="q" /> 

 <input type="submit" value="Search" /> 

</form>

Это прекрасно работает и если честно, то я именно так и поступаю во всех своих проектах по трем простым причинам:

Первая причина - я программист старой закалки и предпочитаю такие вещи писать самостоятельно и не вижу особой экономии времени и сил от использования помощников. 

Вторая причина - я никогда не меняю URL и тем более не меняю route, поэтому использовать функции для получения корректного адреса мне на фиг не нужно. 

Эти две причины достаточно распространены среди программистов старой закалки и может показаться, что Microsoft реально придумала никому не нужную фигню. Но у именно этого помощника действительно есть одно преимущество и оно в третьей причине, почему я игнорирую эти фишки. 

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

 


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

razor

17 Февраля 2013

Ну вообще все гораздо проще чем вы написали:
&lt;form action=&quot;@Url.Action(&quot;Index&quot;, &quot;Home&quot;)&quot; method=&quot;get&quot;&gt;

&lt;input type=&quot;text&quot; name=&quot;q&quot; /&gt;

&lt;input type=&quot;submit&quot; value=&quot;Search2&quot; /&gt;

&lt;/form&gt;


iAlex

17 Февраля 2013

вопрос может быть немного не по теме, я только приступил к изучению asp.net и мне интересен вопрос могу ли я использовать компоненты web-forms в mvc приложении, и если можно объясните почему да или нет


Михаил Фленов

17 Февраля 2013

2razor
Url.Action - это все равно хелпер. Я же показал два варианта - с хелпером Html.BeginForm и без хелперов вообще.

2.iAlex
Никогда не делал компонентов WebForms и даже не знаю, что они из себя представляют


Evilgen

17 Февраля 2013

Уважаемый Михаил Евгеньевич! Позвольте поздравить вас с освоением ХТМЛ-помощников. Кстати, для инпутов тоже есть помощники. TextBox() там всякий. CheckBox удобен тем, что он сразу добавляет скрытое поле, а так мне пришлось бы это делать вручную.
Открою вам еще один секрет, я лично использую шаблоны, ну те что лежат в папочке Views\ControllerName\ DisplayTemplates, EditorTemplates. Раньше писал как лох
@Html.Partial(имя шаблона), теперь
@Html.EditorFor(m =&gt; m.SomeComplexProperty)
А кстати - если вам нужна форма с уже заполненными значениями, как будете их подставлять? Без помощников. Я действительно плохо представляю, как без гемора это сделать, может я чего-то не знаю.
А как насчет сообщений валидации? Для них тоже есть помощники.

Ну еще. Есть же некоторая семантика использования инструментов. Скажем, хелперы это часть ASP MVC, если используем MVC, то следует использовать и их. А то что же, саморезы забиваем, гвозди вкручиваем.


fcoder

18 Февраля 2013

Я, наоборот, стараюсь не использовать голый html для вывода и редактирования данных, а использовать всю мощь хелперов.

Они помогают избегать дублирования. Когда потребуется, например, переделать генерацию кода для вывода одного из полей данных модели, ты меняешь один шаблон в одном месте  - в DisplayTemplates (или EditorTemplates). И не скачешь по всем вьюхам, внося огромную кучу правок.


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне