изменение модели просмотра Атрибут MetadataType во время выполнения

В Microsoft MVC 3.0 у меня есть класс:

public class Product{
    public string Title {get;set;}
}

Этот класс может быть представлен как Продукт или как Услуга, единственная разница между ними - это только метки полей во время просмотра.

поэтому я создаю два класса:

 public class ProductMetaData
    {
        [Display(Name = "Product")]
        public object Title { get; set; }
    }

и

public class ServiceMetaData
    {
        [Display(Name = "Service")]
        public object Title { get; set; }
    }

Как я могу установить эти классы во время выполнения как MetadataType ?

-------------- ---------- РЕДАКТИРОВАТЬ --------------------------

Я обнаружил, что мы можем устанавливать / изменять метаданные для тип путем наследования классов DataAnnotationsModelMetadataProvider и DataAnnotationsModelValidatorProvider и переопределения метода GetTypeDescriptor в обоих, как это:

 public class xx : DataAnnotationsModelMetadataProvider
{

    protected override ICustomTypeDescriptor GetTypeDescriptor(Type type)
    {

        if (type == typeof(InvoiceItemViewModel))
            return (new AssociatedMetadataTypeTypeDescriptionProvider(typeof(InvoiceItemViewModel), typeof(InvoiceItemMetaData))).GetTypeDescriptor(type);
        else
            return base.GetTypeDescriptor(type);
    }
}

 public class yy : DataAnnotationsModelValidatorProvider
{

    protected override ICustomTypeDescriptor GetTypeDescriptor(Type type)
    {

        if (type == typeof(InvoiceItemViewModel))
            return (new AssociatedMetadataTypeTypeDescriptionProvider(typeof(InvoiceItemViewModel), typeof(InvoiceItemMetaData))).GetTypeDescriptor(type);
        else
            return base.GetTypeDescriptor(type);
    }

}

BUT и следующие изменения в

ModelMetadataProviders.Current = new xx();

ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(new yy());

Global.asc. вопрос в том, как это может зависеть от экземпляра модели , а не только от типа?! ... Как я вижу, нет никакого доступа к модели через эти классы. Есть ли место в MVC pipleline для изменения этих двух классов поставщиков на основе данных модели? (например: OnActionExecuting или что-то еще?)

6
задан Mahmoud Moravej 7 January 2012 в 10:01
поделиться