Dodanie atrybutu Required
do właściwości stylu listy tak naprawdę nie robi tego, co chcesz. Osoba składająca skargę złoży skargę, jeżeli lista nie zostanie utworzona, ale nie będzie narzekała, jeśli lista zawiera 0 pozycji.
Należy jednak być dość łatwe do uzyskania przypisywać własne adnotacje danych i uczynić go sprawdzić listę dla Count
> 0. coś takiego jeszcze nie (sprawdzone)
[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:
Należy również zachować ostrożność w sposobie wiązania listy w widoku. Na przykład, jeśli wiążą List<String>
do widoku tak:
<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" />
Model spoiwo MVC będzie zawsze umieścić 5 elementów w liście, wszystkie String.Empty
. Jeśli tak działa Twój widok, Twój atrybut musiałby być nieco bardziej złożony, na przykład za pomocą Reflection, aby pobrać typowy parametr i porównać każdy element listy z czymś w rodzaju: default(T)
.
Lepszą alternatywą jest użycie jQuery do dynamicznego tworzenia elementów wejściowych.
Jeżeli zmienisz swój model w użyciu tablicę zamiast listy można użyć [MinLengthAttribute ] (https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.minlengthattribute%28v=vs.110%29.aspx) – janv8000