Получите все немодельные ошибки из asp-validation-summary

Насколько мне известно, asp-validation-summary может быть одним из следующих:

  • Никто
  • ModelOnly
  • Все

Мне интересно, есть ли какой-либо способ или трюк, чтобы получить все ошибки NonModel или, другими словами, все ошибки, добавленные через ModelState.AddModelError («custom», «какая-то ошибка, которая не возникает из ValidationAttribute в модели»);

2
0
224
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Нет, потому что между ними нет значимого различия. ModelState - это словарь перечислимых строк. Нет информации о том, откуда взялся конкретный ключ, или значение, или элемент в этом значении.

Ошибки "модели" - это просто ошибки, добавленные к ключу пустой строки, тогда как "немодельные" ошибки - это что-то еще. Это все, что у тебя есть.

Ответ принят как подходящий

Столкнулся с такой же проблемой. Я хочу отображать ошибки полей на месте и ошибки на стороне сервера в предупреждении Bootstrap. Чтобы различать явно добавленные ошибки, я добавляю их с префиксом (в моем случае "#"):

ModelState.AddModelError("#SomeError", "Some error occured");

Затем эти ошибки можно отфильтровать в представлении / странице следующим образом:

    var explicitlyAddedErrors = Model
        .Where(_ => _.Key.StartsWith("#"))
        .SelectMany(_ => _.Value.Errors)
        .ToList();

Надеюсь, это будет кому-то полезно. :)

Вы можете добавить следующую строку туда, где вы обычно помещаете asp-validation-summary

@Html.ValidationSummary(true, "", new { @class = "text-danger" })

Первый параметр определяет, следует ли исключать ошибки свойств. Поскольку у меня уже есть asp-validation-for = "PROPERTY", я оставляю свое значение true; нет смысла отображать одно и то же сообщение об ошибке несколько раз.

Второй параметр - отображать заголовок сообщения об ошибке. Например:

@Html.ValidationSummary(true, "Errors", new { @class = "text-danger" })
Errors
 * Invalid Login

«Ошибки» будут отображаться только при наличии хотя бы одной ошибки.

Последний параметр не требует пояснений.

Надеюсь это поможет! :)

Другие вопросы по теме