Я пытаюсь следовать рекомендациям по проверке в ASP.NET Core. У меня есть контактная форма со страницей, привязанной к модели представления.Проверка отклонения привязки к объекту SelectList с использованием аннотаций данных
Модель
public class ViewModel {
...
[Required(ErrorMessage = "Select a city")]
public int CityID { get; set; }
public SelectList CityList { get; set; }
}
Посмотреть
<select id="input-request-type" class="form-control" asp-for="CityID" asp-items="@Model.CityList">
<option value="" hidden disabled selected>Select a city</option>
</select>
<span asp-validation-for="CityID"></span>
Это превращается в нечто подобное в HTML:
<select class="input-validation-error" data-val="true" data-val-required="Select a city" name="CityID">
<option value="" hidden="" disabled="" selected="">Select a city</option>
<option value="9">Toronto</option>
<option value="12">New York</option>
</select>
Проблема с приведенным выше кодом является то, что Валида не вызывает ошибки. Я предполагаю, что проверка еще обнаруживает значение из представления, даже если это пустая строка.
Что я пробовал:
Я попытался изменения аннотаций данных на модели следующим образом:
[Required(ErrorMessage = "Name is required")]
public string Name { get; set; }
...
[BindRequired]
public int CityID { get; set; }
public SelectList CityList { get; set; }
Это показывает ошибку проверки, но он показывает Name is required
. Он поднимает первую ошибку проверки доступной, но не совсем то, что я хотел, чтобы я изменил его на следующее:
...
[BindRequired]
[Required(ErrorMessage = "Select a city")]
public int CityID { get; set; }
public SelectList CityList { get; set; }
Это также показывает ошибку, но она полностью игнорирует сообщение об ошибке, я хочу. Выходной сигнал A value for the 'CityID' property was not provided.
Любая идея о том, как правильно показать сообщение об ошибке, которое я хочу? Кажется, я не могу найти документацию по этой проблеме.