Добавление атрибута 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);
}
}
РЕДАКТИРОВАТЬ:
Вы также должны быть осторожны, как вы связываете свой список в вашем представлении.Например, если вы связываете 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 всегда помещает в ваш список 5 элементов, все String.Empty
.Если именно так работает ваш View, ваш атрибут должен быть немного более сложным, например, используя Reflection для получения параметра универсального типа и сравнивая каждый элемент списка с default(T)
или чем-то еще.
Лучшая альтернативаиспользовать jQuery для динамического создания элементов ввода.