是否可以将 [Required] 属性放到 List 属性上?
我绑定到 POST 上的通用列表,想知道如果属性中有 0 个项目,是否可以使 ModelState.IsValid() 失败?
添加Required
列表样式属性的属性并不能真正实现您想要的功能。如果未创建列表,则会抱怨,但如果列表中存在 0 个项目,则不会抱怨。
但是,派生您自己的数据注释属性并使其检查列表应该很容易Count
> 0.类似这样的(尚未测试):
[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);
}
}
EDIT:
您还必须小心如何在视图中绑定列表。例如,如果您绑定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 模型绑定器将always将 5 个元素全部放入列表中String.Empty
。如果这就是您的视图的工作方式,您的属性将需要变得更复杂一点,例如使用反射来拉取通用类型参数并将每个列表元素与default(T)
或者其他的东西。
更好的替代方法是使用 jQuery 动态创建输入元素。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)