でのviewmodelのたmetadataType属性を変更し、私はクラスを持っている:このクラスは、製品として、あるいはサービスとして表すことができるは、マイクロソフトMVC 3.0で実行
public class Product{
public string Title {get;set;}
}
、それらの間の唯一の違いは、閲覧時にだけ、フィールドのラベルです。
ので、私は、2つのクラスを作成:
public class ProductMetaData
{
[Display(Name = "Product")]
public object Title { get; set; }
}
と
私は たmetadataTypeとして、実行時にこれらのクラスを設定するにはどうすればよいpublic class ServiceMetaData
{
[Display(Name = "Service")]
public object Title { get; set; }
}
を?
------------------------ EDIT -------------------- ------
私たちはクラス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());
しかし、問題は、モデルインスタンスにそれを依存し、ちょうど入力しない?!...私は、これらのクラスを通じてモデルへのすべてのアクセスがありません見ての通りことができる方法です。モデルデータに基づいてこれらの2つのプロバイダクラスを変更するためのMVCピンプラインの場所はありますか? (例:OnActionExecutingなど)
OW!この単純な作業にはあまりにも複雑です!私はそれのための回避策を見つけることを好む! –
@MahmoudMoravej、それが私のアプリケーションでDataAnnotationsを使用して検証を実行しない理由です。私はFluentValidation.NETを使用します。 –