ASP.NET MVC ModelMetaData:有没有办法基础上,RequiredAttribute标签设置IsRequired?
-
12-09-2019 - |
题
布拉德·威尔逊张贴在ASP.NET MVC的新ModelMetaData一个伟大的博客系列: HTTP://bradwilson.typepad的.com /博客/ 2009/10 / ASPNET-MVC -2-模板部分-2- modelmetadata.html
在书中,他描述了如何ModelMetaData类的意见和模板助手,现在暴露出来。我想要做的是显示一个表单字段标签旁边的星号,如果需要的领域,所以我想过使用ModelMetaData的IsRequired财产。然而,IsRequired默认情况下为所有非空的属性真的,而这是所有空的属性假的。问题是,弦总是空的,所以IsRequired属性始终是字符串错误。有谁知道如何重写的IsRequired是如何设置的默认?另外,我想到了充分利用,我一直在与装饰我的属性RequiredAttribute标签属性,但RequiredAttribute标签似乎并没有通过ModelMetaData类暴露。有谁知道如何解决这个问题?
预先感谢。
解决方案
您需要创建自己的ModelMetadataProvider。下面是一个使用DataAnnotationsModelBinder一个例子
public class MyMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata(Collections.Generic.IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
{
var _default = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
_default.IsRequired = attributes.Where(x => x is RequiredAttribute).Count() > 0;
return _default;
}
}
然后在Global.asax中的AppStartup,你会希望把下面来装MyMetadataProvider为默认的元数据提供:
ModelMetadataProviders.Current = new MyMetadataProvider();
不隶属于 StackOverflow