asp.net-mvc – 通用列表属性的必需属性
发布时间:2020-12-15 18:39:21 所属栏目:asp.Net 来源:网络整理
导读:是否可以将[必需]属性放在List属性? 我在POST上绑定一个通用列表,并且想知道如果属性中有0个项目,是否可以使ModelState.IsValid()失败? 解决方法 将“必需”属性添加到列表样式属性不会真正做到您想要的。如果列表未创建,则将抱怨,但如果列表中存在0项
是否可以将[必需]属性放在List<>属性?
我在POST上绑定一个通用列表,并且想知道如果属性中有0个项目,是否可以使ModelState.IsValid()失败? 解决方法
将“必需”属性添加到列表样式属性不会真正做到您想要的。如果列表未创建,则将抱怨,但如果列表中存在0项,则不会抱怨。
但是,应该很容易得出自己的数据注释属性,并使其检查Count>的列表。这样的东西(尚未测试): [AttributeUsage(AttributeTargets.Property)] public sealed class CannotBeEmptyAttribute : ValidationAttribute { private const string defaultError = "'{0}' must have at least one element."; public CannotBeEmptyAttribute ( ) : base(defaultError) // { } public override bool IsValid ( object value ) { IList list = value as IList; return ( list != null && list.Count > 0 ); } public override string FormatErrorMessage ( string name ) { return String.Format(this.ErrorMessageString,name); } } 编辑: 您还必须小心如何在视图中绑定列表。例如,如果绑定List< String>像这样的看法: <input name="ListName[0]" type="text" /> <input name="ListName[1]" type="text" /> <input name="ListName[2]" type="text" /> <input name="ListName[3]" type="text" /> <input name="ListName[4]" type="text" /> MVC模型binder将始终将5个元素放在列表中,即所有的String.Empty。如果这是您的View如何工作,您的属性将需要更复杂,例如使用Reflection来拉取通用类型参数并将每个列表元素与默认(T)或某些东西进行比较。 一个更好的选择是使用jQuery动态创建输入元素。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 我如何在ASP.NET MVC中“多播缓存”,而不仅
- asp.net-mvc – {get;组; }在ViewModel中使用
- asp.net-mvc – 将Visual Studio项目转换为ASP.NET MVC
- .net – 使用COM注册托管程序集而不使用GAC
- asp.net – Visual Studio在记事本中打开网页
- asp.net-mvc – ASP.NET MVC的示例企业应用程序?
- 在Asp.Net Membership中手动更改用户名
- asp.net-mvc – IIS显示服务器错误而不是自定义错误
- asp.net-mvc – 如何在页面中显示ASP.net MVC项目版本?
- abp简单了解
推荐文章
站长推荐
热点阅读