2017-02-15 4 views
0

Я пытаюсь следовать рекомендациям по проверке в 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.

Любая идея о том, как правильно показать сообщение об ошибке, которое я хочу? Кажется, я не могу найти документацию по этой проблеме.

ответ

0

Кажется, вы можете переопределить сообщение на самом представлении.

Модель

[BindRequired] 
public int CityID { get; set; } 
public SelectList CityList { get; set; } 

Посмотреть

<style> 
    .field-validation-valid { 
     display: none; 
    } 
</style> 

<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">Select a city</span> 

Пролет элемент для проверки переходит в следующее в зависимости, если значение является действительным или нет:

// valid 
<span class="field-validation-valid" data-valmsg-for="CityID" data-valmsg-replace="true"> 
    Select a city 
</span> 

// invalid 
<span class="field-validation-error text-danger" data-valmsg-for="CityID" data-valmsg-replace="true"> 
    Select a city 
</span> 
Смежные вопросы