asp.net-mvc – 通用列表属性的必需属性

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 通用列表属性的必需属性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以将[必需]属性放在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相关文章