Получить все ошибки 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>