Получить все ошибки ModelState в представлении

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

Итак, мне кажется, мне нужно получить все ошибки ModelState, получить имена полей и затем изменить цвет. Это хороший способ?

Как я могу получить ошибки ModelState на мой взгляд?

Ответ 1

Вы можете получить доступ к нему через ViewData.ModelState. Если вам нужно больше контроля с ошибками в вашем представлении, вы можете использовать

ViewData.ModelState.IsValidField("name_of_input")

или получить список входов с такими ошибками:

var errors = ViewData.ModelState.Where(n => n.Value.Errors.Count > 0).ToList();

Ответ 2

В моем контроллере я добавляю некоторые ошибки ModelState. Итак, когда я Просмотрите, я хочу получить все эти ошибки и изменить цвет метки полей, содержащих ошибку.

Именно это произойдет, если вы добавите ошибку модели с тем же самым ключом в ModelState, что и Html.ValidationMessageFor, который вы использовали в своем представлении.

Итак, допустим, предположим, что в вашей форме у вас есть следующий фрагмент:

@Html.LabelFor(x => x.Bazinga)
@Html.EditorFor(x => x.Bazinga)
@Html.ValidationMessageFor(x => x.Bazinga)

и в вашем действии контроллера HttpPost вы можете добавить следующее сообщение об ошибке, чтобы выделить поле Bazinga:

ModelState.AddModelError("Bazinga", "Please enter a valid value for the Bazinga field");

И если вы хотите добавить какое-то общее сообщение об ошибке, которое не связано с каким-то конкретным полем ввода, вы всегда можете использовать помощник @Html.ValidationSummary() в верхней части формы для его отображения. И в действии вашего контроллера:

ModelState.AddModelError(string.Empty, "Some generic error occurred. Try again.");

Ответ 3

Чтобы отобразить все ошибки, попробуйте:

<div asp-validation-summary="All" class="text-danger"></div>

или

<div class="text-danger">
    @Html.ValidationSummary(false)
</div>