Правильный способ сделать это - внедрить пользовательский поставщик метаданных модели, чтобы добавить метаданные в модель на основе атрибута:
public class MyModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata(IEnumerable<System.Attribute> attributes, System.Type containerType, System.Func<object> modelAccessor, System.Type modelType, string propertyName)
{
var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
var wizardStepAttr = attributes.OfType<WizardStepAttribute >().FirstOrDefault();
if (wizardStepAttr != null)
{
metadata.AdditionalValues.Add("WizardStep", wizardStepAttr);
}
return metadata;
}
}
... и затем извлечь эти данные из метаданных модели:
@Html.Label(((WizardStepAttribute)ViewModel.ModelMetaData.AdditionalValues["WizardStep"]).Name)
Вам нужно будет зарегистрировать этого провайдера метаданных в Application_Start
следующим образом:
ModelMetadataProviders.Current = new MyModelMetadataProvider();
(Обратите внимание, что некоторые расширения DI Framework для MVC автоматически подключаются, если вы связываете ModelMetadataProvider
до MyModelMetadataProvider
)