В Microsoft MVC 3.0 У меня есть класс:изменения атрибута MetadataType ViewModel во время выполнения
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);
}
}
И следующие изменения в Glo bal.ascx
ModelMetadataProviders.Current = new xx();
ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(new yy());
но вопрос в том, как может зависеть от его экземпляра модели и не только печатать?! ... Как я вижу, что нет какой-либо доступ к модели через эти классы. Есть ли место в MVI pipleline для изменения этих двух классов класса на основе данных модели? (например, в: OnActionExecuting или что-то еще?)
ow! слишком сложная для этой простой задачи! Я предпочитаю найти обходное решение для этого! –
@MahmoudMoravej, вот почему я не использую DataAnnotations для выполнения проверки в моих приложениях. Я использую FluentValidation.NET. –