[ASP.NET MVC]自己定義 CustomModelMetadataProvider,替 model 加上 DataAnnotation
假設有個 Model,現在想要把全部欄位都加上 [Required],通常是手動加上去。
另一個方法是自己定義一個 ModelMetadataProvider,讓程式加上去
Step 1:新增一個繼承DataAnnotationsModelMetadataProvider的Clss,覆寫 CreateMetadata。
{
protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes,
Type containerType,
Func<object> modelAccessor,
Type modelType,
string propertyName)
{
if (containerType != null && containerType.Name == "ModelName")
{
RequiredAttribute requiredAttr = new RequiredAttribute();
attributes = attributes.Union(new[] { requiredAttr });
}
return base.CreateMetadata(attributes,
containerType,
modelAccessor,
modelType,
propertyName);
}
}
程式主要只有第 10~14 行而已,containerType.Name 就是看你想要在哪個model加上[Required],就寫那個model的名字。
裡面就新增個 RequiredAttribute 把它 Union 到 attributes 就行了。
如果只想把[Required] 加在 model 的某個欄位,那裡面就再寫個 if(propertyName="欄位名稱") 就行了。
Step 2:在 Global.asax 的 Application_Start() 裡面加上 ModelMetadataProviders.Current = new CustomModelMetadataProvider(); 。
這樣就完成了。