Как шаблоны редактора / шаблоны отображения могут распознавать любые атрибуты, назначенные им? - PullRequest
7 голосов
/ 06 сентября 2011

Я хочу добавить атрибут [Required] в шаблон моего редактора DateTime, чтобы я мог добавить соответствующие схемы проверки или атрибут DataType.Date, чтобы я знал, когда мне нужно отображать только даты. Но я не могу понять, как получить метаданные, в которых указано, какие атрибуты ему назначил шаблон редактора.

1 Ответ

15 голосов
/ 06 сентября 2011

Встроенные атрибуты, такие как [Required], назначают различные свойства для метаданных (см. Сообщение в блоге, которое я привел в конце моего ответа, чтобы узнать больше). Например:

public class MyViewModel
{
    [Required]
    public string Foo { get; set; }
}

присвоит:

@{
    var isRequired = ViewData.ModelMetadata.IsRequired;
}

в соответствующем редакторе / шаблоне отображения.

А если у вас был собственный атрибут:

public class MyCustomStuffAttribute : Attribute, IMetadataAware
{
    public void OnMetadataCreated(ModelMetadata metadata)
    {
        metadata.AdditionalValues["customStuff"] = "some very custom stuff";
    }
}

и украшенная им модель вида:

public class MyViewModel
{
    [MyCustomStuff]
    public string Foo { get; set; }
}

в соответствующем шаблоне редактора / дисплея вы можете получить это:

@{
    var myCustomStuff = ViewData.ModelMetadata.AdditionalValues["customStuff"];
}

Также вам следует прочитать серию сообщений Брэда Уилсона *1020* о том, что такое ModelMetadata и шаблоны в ASP.NET MVC и как их использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...