Agregar el atributo Required
a una propiedad de estilo de lista realmente no hace lo que desea. La voluntad se quejará si la lista no se crea, pero no se quejará si la lista existe con 0 elementos en ella.
Sin embargo, debería ser bastante fácil para derivar atribuyen sus propias anotaciones de datos y hacer que compruebe la lista de Count
> 0. Algo como esto (no determinado todavía):
[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:
También deberá tener cuidado al vincular su lista en su vista. Por ejemplo, si se enlaza un List<String>
a una vista como esta:
<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" />
El modelo ligante MVC siempre poner 5 elementos en la lista, todas String.Empty
. Si así es como funciona su Vista, su atributo debería ser un poco más complejo, como usar Reflection para extraer el parámetro de tipo genérico y comparar cada elemento de la lista con default(T)
o algo así.
Una mejor alternativa es usar jQuery para crear dinámicamente los elementos de entrada.
Si cambia su modelo a utilizar una matriz en lugar de una lista se puede utilizar el [MinLengthAttribute ] (https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.minlengthattribute%28v=vs.110%29.aspx) – janv8000