метка или @html.Label ASP.net MVC 4

Новичок в ASP.net MVC 4 и пытается разобраться в Razor. Если бы я хотел просто отобразить текст на моей странице .cshtml, могу ли я использовать

<label class="LabelCSSTop">Introduction</label>

или я должен использовать:

 @Html.Label("STW", htmlAttributes: new { @class = "LabelCSSTop" })

Не уверен, что один из них предпочтительнее другого или любой из них в порядке. Если последний все равно выдает тег метки, должен ли я просто придерживаться первого?

Опять же, если я просто хочу отобразить текстовое поле, могу ли я просто сделать это:

<input id="txtName" type="text" />

или я должен сделать это:

@Html.TextBox("txtName", "")

Есть ли ситуация, когда я должен использовать @Html вместо обычного тега html?

Заранее спасибо!!


person alpha    schedule 25.04.2013    source источник


Ответы (6)


В случае фрагмента вашего ярлыка это не имеет большого значения. Я бы выбрал более простой синтаксис (обычный HTML).

Большинство вспомогательных методов также не позволяют окружать другой элемент. Это может быть соображением при выборе использовать / не использовать его.

Эквиваленты со строгой типизацией

Однако стоит отметить, что при использовании @Html.[Element]For<T>() методов вы получаете важные функции. Обратите внимание на «For» в конце имени метода.

Пример:

@Html.TextBoxFor( o => o.FirstName )

Это будет обрабатывать создание идентификатора/имени на основе иерархии объектов (что имеет решающее значение для привязки модели). Это также добавит ненавязчивые атрибуты проверки. Эти методы принимают Expression в качестве аргумента, который ссылается на свойство в модели. Метаданные этого свойства получаются платформой MVC, и поэтому она «знает» о свойстве больше, чем ее аналог строкового аргумента.

Это также позволяет вам работать с кодом пользовательского интерфейса строго типизированным образом. Visual Studio подсветит синтаксические ошибки, но не может сделать это со строкой. Представления также могут быть дополнительно скомпилированы вместе с решением, что позволяет выполнять дополнительные проверки во время компиляции.

Другие соображения

Иногда вспомогательный метод HTML также будет выполнять дополнительные полезные задачи, такие как Html.Checkbox и Html.CheckboxFor, которые также создают скрытое поле для флажка. Другим примером являются методы, связанные с URL (например, для гиперссылки), которые учитывают маршрут.

<!-- bad -->
<a href="/foo/bar/123">my link</a>

<!-- good -->
@Html.ActionLink( "my link", "foo", "bar", new{ id=123 } )

<!-- also fine (perhaps you want to wrap something with the anchor) -->
<a href="@Url.Action( "foo", "bar", new{ id=123 } )"><span>my link</span></a>

Существует небольшое преимущество в производительности при использовании простого HTML по сравнению с кодом, который должен выполняться при каждом отображении представления, хотя это не должно быть решающим фактором.

person Tim Medora    schedule 25.04.2013

Зависит от того, что вы делаете.

Если у вас есть SPA (одностраничное приложение), вы можете использовать:

<input id="txtName" type="text" />

В противном случае рекомендуется использовать помощники Html, чтобы ваши элементы управления были связаны с вашей моделью.

person Ahmed El Kilani    schedule 25.04.2013
comment
Вам не нужно использовать помощники Html, чтобы ваши элементы формы были связаны с вашей моделью. Если вы назовете свои элементы формы так, как они названы в модели с ручным вводом формы, связыватель модели все равно будет привязан к ним. - person Tommy; 25.04.2013
comment
Я не сказал "должен". Я сказал рекомендовал. У вас есть несколько помощников, которые помогут вам управлять вашими элементами, локализацией и сообщениями проверки. - person Ahmed El Kilani; 25.04.2013
comment
Извините, ваше заявление читается так, как будто рекомендуется использовать помощники, потому что они связывают ваши элементы управления с вашей моделью. Виноват - person Tommy; 25.04.2013

Если вы хотите просто отобразить некоторый текст на своей странице .cshtml, я не рекомендую использовать @Html.Label, а также не использовать метку html. Элемент представляет собой заголовок в пользовательском интерфейсе. и вы увидите это в в случае @Html.Label добавляется атрибут for, относящийся к идентификатору, возможно, несуществующего элемента. Значением этого атрибута является значение поля модели, в котором символы, отличные от буквенно-цифровых, заменены символами подчеркивания. Вы должны использовать @Html.Display или @Html.DisplayFor, возможно, обернутые в какой-нибудь простой элемент html line span или p.

person R. Schreurs    schedule 05.09.2013

Помощники в основном помогают отображать метки, входные данные формы и т. д. для строго типизированных свойств вашей модели. Используя помощники и Visual Studio Intellisense, вы можете значительно сократить количество опечаток, которые вы можете сделать при создании веб-страницы.

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

person Tommy    schedule 25.04.2013

Когда дело доходит до лейблов, я бы сказал, что вам решать, что вы предпочитаете. Некоторые примеры, когда это может быть полезно с помощью вспомогательных тегов HTML, например:

  • При работе с гиперссылками, поскольку помощник HTML упрощает маршрутизацию
  • Когда вы привязываетесь к своей модели, используя @Html.LabelFor, @Html.TextBoxFor и т. д.
  • Когда вы используете @Html.EditorFor, вы можете назначить определенное поведение и внешний вид в виде редактора.
person The Jonas Persson    schedule 25.04.2013

@html.label и @html.textbox используются, когда вы хотите легко привязать его к своей модели... чего нельзя достичь путем ввода и т. д. в одной строке

person Shafqat Masood    schedule 25.04.2013