asp.net-mvc – ASP.NET MVC ModelMetaData:有没有办法基于RequiredAttribute设置IsRequired?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – ASP.NET MVC ModelMetaData:有没有办法基于RequiredAttribute设置IsRequired?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Brad Wilson在ASP.NET MVC的新ModelMetaData上发布了一个很棒的博客系列:
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();

猜你在找的asp.Net相关文章