Brad Wilson在ASP.NET MVC的新ModelMetaData上发布了一个很棒的博客系列:
http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-2-modelmetadata.html
http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-2-modelmetadata.html
在其中,他描述了ModelMetaData类现在在Views和模板化助手中的暴露方式.我想做的是在窗体域标签旁边显示一个星号,如果该字段是必需的,那么我考虑使用ModelMetaData的Isrequired属性.但是,对于所有非空值属性,Isrequired默认为true,而对所有可空属性为false.问题是字符串始终为空,因此Isrequired属性对于字符串始终为false.有人知道如何覆盖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();