HTML-помощники ASP.NET MVC переоценены - PullRequest
15 голосов
/ 29 августа 2009

Вполне возможно, что я, возможно, не понял, но я действительно не могу понять, как HTML-помощники ASP.NET MVC могут мне помочь. Вот пример: -

HTML:

<a href="ActionName" target="_blank">Click Me</a>

HTML Helper:

<%= Html.ActionLink("Click me", "ActionName", null, new {target="blank"}) %>

Мне легче читать HTML, и использование HTML-помощников кажется нелогичным.

Посмотрите на следующие аргументы:

  • Многие люди (даже новички) знают, как читать HTML. Синтаксис HTML Helper может легко запутаться.
  • Во многих случаях вам нужно больше набирать текст для написания «помощника» HTML, чем писать настоящий HTML.
  • Помощник HTML все равно будет извергать настоящий HTML, так почему бы не написать HTML напрямую?
  • Написание HTML дает вам больше контроля над синтаксисом и стандартами. Вы можете сделать так, чтобы он соответствовал любому стандарту HTML, который вы хотите.

Существуют ли какие-то особые убедительные причины, которые я не понял (поскольку я самоучка в MVC и могут быть пробелы), из-за которых мне хотелось бы предпочесть HTML-помощники?

Или это просто кодовый шум?

Ответы [ 4 ]

15 голосов
/ 29 августа 2009

Основная причина, по которой вы не используете теги <a> напрямую, заключается в том, что вы не хотите жестко кодировать URL-адреса в своем приложении. Метод Html.ActionLink отвлечет генерацию URL, и вы укажете контроллер, действие и другие параметры.

Так что, в принципе, две строки, которые вы разместили в своем вопросе, на самом деле не эквивалентны. Вам следует подумать о добавлении динамического кода генерации URL в тег <a>, чтобы сделать их функционально эквивалентными. Кроме того, если вы выводите HTML напрямую, вы должны быть предельно осторожны с HTML-кодированием. Html.ActionLink тоже сделает эту работу за вас.

9 голосов
/ 29 августа 2009

Допустим, у вас есть много параметров запроса в URL, например,

* * Site.com тысяча два? А = 1 & Ь = 2 & с = 3 & д = 4 & е = 1 & е = 1
<%= Html.ActionLink("Click me", "ActionName", null, new {a=1, b=2, c=3, d=4, e=1, f=1}) %>

Actionlink может создать этот URL для вас. Если у вас нет помощника, вам придется вручную добавлять ключи и значения в URL. И это настоящая боль. URL-помощник также может сопоставлять URL-маршруты.

7 голосов
/ 29 августа 2009

Еще лучше, используйте MvcContrib и отбросьте подверженные ошибкам "волшебные строки" и замените их лямбдами.

<%= Html.ActionLink<MyController>(x => x.ActionName() ,"Click me",new {target="blank"}) %>
0 голосов
/ 29 августа 2009

На самом деле, нет большой разницы между

<a href="ActionName" target="_blank">Click Me</a>

и

<%= Html.ActionLink("Click me", "ActionName", null, new {target="blank"}) %>

потому что в обоих случаях вы жестко программируете (URL в первом, имя действия во втором).

Вот почему я создаю специальные вспомогательные методы для ссылок, а затем использую

<%= Html.LinkSomeAction("Click me") %>

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

Решение, предложенное mxmissile, также хорошо.

...