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

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