Joh*_*ika 13 asp.net-mvc data-annotations asp.net-mvc-2
Brad Wilson在ASP.NET MVC的新ModelMetaData上发布了一个很棒的博客系列:http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-2-modelmetadata.html
在其中,他描述了如何在Views和模板化助手中公开ModelMetaData类.我想要做的是如果字段是必需的,在表单字段标签旁边显示一个星号,所以我考虑使用ModelMetaData的IsRequired属性.但是,默认情况下,IsRequired对于所有非可空属性都是true,而对于所有可为空的属性都是false.问题是,字符串总是可以为空的,因此字符串的IsRequired属性始终为false.有谁知道如何覆盖IsRequired的默认设置?或者,我考虑利用我一直在用我的属性装饰的RequiredAttribute属性,但似乎没有通过ModelMetaData类公开RequiredAttribute.有谁知道如何解决这个问题?
提前致谢.
zow*_*ens 17
您需要创建自己的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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在Global.asax的AppStartup中,您需要将以下内容连接到MyMetadataProvider作为默认元数据提供程序:
ModelMetadataProviders.Current = new MyMetadataProvider();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3165 次 |
| 最近记录: |