加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC ModelMetaData:有没有办法基于Requ

发布时间:2020-12-15 23:27:05 所属栏目:asp.Net 来源:网络整理
导读:Brad Wilson在ASP.NET MVC的新ModelMetaData上发布了一个很棒的博客系列: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-2-modelmetadata.html 在其中,他描述了ModelMetaData类现在在Views和模板化助手中的暴露方式.我想做的是
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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读