#asp.net-mvc-3
#asp.net-mvc-3
Вопрос:
Я изо всех сил пытаюсь найти реальную ценность в аннотировании моих моделей просмотра с помощью DisplayAttribute
. Единственное преимущество, которое я вижу, заключается в том, что этот слабо типизированный код представления:
<label for="IPAddress">IP address</label>
Становится строго типизированным:
@Html.LabelFor(m => m.IPAddress)
Недостатком является то, что мне нужно перекомпилировать и повторно развернуть мое веб-приложение, чтобы исправить простую опечатку.
Не было бы лучше хранить информацию только для отображения там, где ей место, в представлении, и иметь какой-нибудь HTML-помощник для отображения правильного идентификатора поля, например, так:
<label for="@Html.IdFor(m => m.IPAddress)">IP address</label>
Думаю, мне просто любопытно, почему ребята из MVC выбрали решение на основе атрибутов. Возможно, я упускаю что-то очевидное?
Комментарии:
1. Я тоже прошел через тот же этап, я просто использую перегруженные html-помощники для передачи того, что мне нужно, однако вы можете писать свои представления так, как хотите, вы можете использовать параметры по умолчанию, предоставленные, как вы отметили выше, или сделать это другим способом. Кроме того, если ваш контент на 100% управляется ajax, все, что вы отправляете в представление в формате json и обрабатываете его с помощью jquery или другого языка на стороне клиента — я думаю, что это может даже стать нормой очень скоро!
Ответ №1:
Я считаю, что DisplayAttributes поддерживают локализацию. Это может быть веской причиной не вводить жесткий код английских меток…
Может представлять интерес этот пост в блоге: Локализовать уведомления о данных ASPNET MVC 2
Комментарии:
1. Хороший момент. Я не рассматривал глобализацию. Этого также можно достичь путем локализации представлений (например,
Index.de.cshtml
), но это, безусловно, еще одно дополнениеDisplayAttribute
.
Ответ №2:
Если вы используете свои объекты только в простом веб-приложении, поддерживающем один язык, я не вижу причин использовать LabelFor
.
Комментарии:
1. Вы имели в виду
I see no reason **not** to use LabelFor
?2. Нет, я имел в виду, что нет причин его использовать. Опять же, причин не использовать его тоже нет. Это просто предпочтение синтаксиса при использовании только одного языка.
LabelFor
отлично подходит при выполнении локализаций.3. Я думал, вы имели в виду
LabelFor
перегрузку, которая принимает в качестве второго аргумента текст для отображения и, таким образом, избегает использованияDisplayAttribute
в модели.