布拉德·威尔逊张贴在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();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top