asp.net mvc добавить метаданные модели без атрибутов - PullRequest
2 голосов
/ 12 августа 2011

В наших формах asp.net mvc мы обычно добавляем атрибуты в свойства нашей модели представления, такие как DisplayName, Description и Required.

Затем мы просто вызываем Html.EditorFor(model => model.PropertyName) для каждого свойства.

Теперь у меня есть ситуация, когда у меня нет строго типизированной модели представления, к которой я могу применить такие атрибуты.Вместо этого у меня есть список следующего класса:

public class AttributeValue
{
    public string Name { get; set; }
    public string Description { get; set; }
    public bool Required { get;set; }
    public object AttributeValue { get; set; }
}

Как я могу добавить метаданные вручную, используя информацию, хранящуюся в вышеприведенном классе, чтобы помощник и проверка EditorFor все еще работали?*

Ответы [ 2 ]

4 голосов
/ 12 августа 2011

Вы должны написать собственные классы ModelMetadataProvider и ModelValidatorProvider

public class DynamicModelValidatorProvider : ModelValidatorProvider
{
    public override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context)
    {
        // you validation logic go there
        yield break;
    }
}


public class DynamicModelMetadataProvider : ModelMetadataProvider
{
    public override IEnumerable<ModelMetadata> GetMetadataForProperties(object container, Type containerType)
    {
        yield return new ModelMetadata(this, containerType, null, typeof (string), "Hello");
        yield return new ModelMetadata(this, containerType, null, typeof (string), "World");
    }

    public override ModelMetadata GetMetadataForProperty(Func<object> modelAccessor, Type containerType, string propertyName)
    {
        return GetMetadataForProperties(null, containerType).SingleOrDefault(x => x.PropertyName == propertyName);
    }

    public override ModelMetadata GetMetadataForType(Func<object> modelAccessor, Type modelType)
    {
        return new ModelMetadata(this, null, modelAccessor, modelType, null);
    }
}
0 голосов
/ 12 августа 2011

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

Пожалуйста, ознакомьтесь с серией статей Брэда Уилсона о работе с шаблонами в ASP.NET MVC, которую вы можете найти здесь:

http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html

Оттуда вы найдете шаблоны объектов по умолчанию как для отображения, так и для редактирования.

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

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