MVC 4 Аннотации данных "Display" Attribute
Я начинаю работу с MVC 4 (механизм просмотра Razor). (Я считаю, что это может относиться и к MVC 3 и более ранним.) Мне интересно, есть ли какая-либо польза от использования аннотации данных DisplayAttribute в представлении, а не только для написания строки непосредственно в HTML. Например, если бы у меня была следующая модель:
public class Thing
{
public string WildAndCrazyProperty { get; set; }
}
... будет ли какая-либо польза в аннотации свойства как:
[Display(Name = "Wild and Crazy")]
public string WildAndCrazyProperty { get; set; }
... и с моей разметкой:
<html>
<body>
<div>@Html.DisplayNameFor(modelItem => modelItem.WildAndCrazyProperty)</div>
<div>@Html.DisplayFor(modelItem => modelItem.WildAndCrazyProperty)</div>
</body>
</html>
... против отсутствия аннотации и выполнения:
<html>
<body>
<div>Wild and Crazy</div>
<div>@Html.DisplayFor(modelItem => modelItem.WildAndCrazyProperty)</div>
</body>
</html>
Причина, по которой я не упоминал Html.LabelFor
, в этом случае заключается в том, что данные свойства отображаются на странице как статический (то есть редактируемый) текст. Данные никогда не будут редактироваться на этой странице, поэтому мне не нужно использовать Html.TextBoxFor
во втором <div> и затем используйте Html.LabelFor
, чтобы правильно связать метку с этим текстовым полем.
Ответы
Ответ 1
Если два разных представления используют одну и ту же модель (например, возможно, одно для мобильного вывода, а другое - обычное), было бы неплохо, чтобы строка находилась в одном месте: в качестве метаданных в ViewModel.
Кроме того, если у вас была унаследованная версия модели, для которой требовалось другое отображение, это может быть полезно. Например:
public class BaseViewModel
{
[Display(Name = "Basic Name")]
public virtual string Name { get; set; }
}
public class OtherViewModel : BaseViewModel
{
[Display(Name = "Customized Inherited Name")]
public override string Name { get; set; }
}
Я признаю, что этот пример довольно надуманный...
Это лучшие аргументы в пользу использования атрибута, который я могу придумать. Мое личное мнение таково, что по большей части такие вещи лучше оставить на разметке.
Ответ 2
В дополнение к другим ответам, существует большая польза от использования DisplayAttribute
, если вы хотите локализовать поля. Вы можете найти имя в базе данных локализации, используя DisplayAttribute, и он будет использовать любой перевод, который вы пожелаете.
Кроме того, вы можете позволить MVC генерировать шаблоны для вас, используя Html.EditorForModel()
, и он будет генерировать правильный ярлык для вас.
В конечном счете, это зависит от вас. Но MVC очень "ориентирован на модель", поэтому атрибуты данных применяются к моделям, поэтому метаданные существуют в одном месте. Вам не нужно делать огромное количество лишнего ввода.
Ответ 3
Одним из преимуществ является то, что вы можете использовать его в нескольких представлениях и иметь согласованный текст меток. Он также используется для создания подкладок asp.net MVC для создания текста меток и облегчает создание значимого текста
[Display(Name = "Wild and Crazy")]
public string WildAndCrazyProperty { get; set; }
"Wild and Crazy" постоянно отображается везде, где вы используете свойство в своем приложении.
Иногда это не является гибким, поскольку вы можете изменить текст в некотором представлении. В этом случае вам придется использовать собственную разметку, как в вашем втором примере
Ответ 4
Я считаю, что одно из применений заключается в том, что вы можете переименовать свою собственность, и все виды использования будут немедленно обновлены.