Получение атрибутов поля в дополнительном EditorTemplate

Я хочу сделать дополнительный шаблон редактора для Int32. В нем я хочу получить все атрибуты (custom/default-data-annotations) и поработать с ними:

@model Int32

@{
    string propertyName = ViewData.ModelMetadata.PropertyName;
    var attributes = ViewData.ModelMetadata.GetSomeHowAllTheAttributesOfTheProperty;
    SomeWorkWithAttribute(attributes);

}
<input type="text" name="@propertyName" value="@ViewData.ModelMetadata.DisplayFormatString" class="form-control"/>

Итак, вопрос, как получить в EditorTemplate все атрибуты свойства?

Спасибо за любой аванс.

1 ответ

Решение

РЕДАКТИРОВАТЬ: первоначальный ответ удален (недостаточно информации в вопросе):

Так как вам нужен доступ к вашему пользовательскому атрибуту, я предлагаю следующее:

A: если вы просто сохраняете некоторые значения, используя свой пользовательский атрибут, используйте AdditionalMetadataAttribute:

Модель:

[Additional("myAdditionalInfoField", "myAdditionalInfoValue")]
public int IntProperty { get; set; }

Посмотреть:

@{
    string valueFromAttribute = ViewData.ModelMetadata.Additional["myAdditionalInfoField"].ToString();
}

B: если вы выполняете более сложную работу внутри своего пользовательского атрибута, получите текущее свойство метаданных для вашей модели и сохраните вычисленные значения внутри ViewData.ModelMetadata.Additional толковый словарь. Обратите внимание, что для этого необходимо, чтобы вы реализовали свой собственный поставщик метаданных. Подробную реализацию можно найти здесь.

Вот как получить доступ ко всем атрибутам в свойстве модели из DisplayTemplate или EditorTemplate:

var attributes = ((Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata)ViewData.ModelMetadata).Attributes;

тогда вы можете получить нужный пользовательский атрибут:

var yourAttribute = attributes.PropertyAttributes.OfType<YourAttribute>().FirstOrDefault();

теперь у вас есть yourAttribute делать что хочешь!

Другие вопросы по тегам