Я хочу получить все сообщения об ошибках из modelState, не зная значений ключей. Циклически перебирайте все сообщения об ошибках, которые содержит ModelState.
Как я могу это сделать?
asp.net-mvc
modelstate
chobo2
источник
источник
@Html.ValidationSummary()
это быстрый способ отобразить их все как бритва.foreach (var error in ViewData.ModelState.Values.SelectMany(modelState => modelState.Errors)) { DoSomething(error); }
Ответы:
См. Также Как получить коллекцию ошибок состояния модели в ASP.NET MVC? ,
источник
Value.ErrorMessage
и вместо этогоValue.Exception.Message
foreach (KeyValuePair<string, ModelState> kvp in htmlHelper.ViewData.ModelState) {
и вставить эту строку под ним:var modelState = kvp.Value;
. Вы можете получить ключ отkvp.Key
Используя LINQ :
источник
List<string> errors = new List<string>()
вместо того, чтобыvar errors = new List<string>()
действительно тратить время, но письмоIEnumerable<ModelError> allErrors = ModelState.Values.SelectMany(v => v.Errors);
, где тип возвращаемого значения не совсем понятен, действительно лучше с точки зрения читабельности. (даже если Visual Studio может дать его вам при наведении мыши)Опираясь на версию LINQ, если вы хотите объединить все сообщения об ошибках в одну строку:
источник
Я смог сделать это с помощью небольшого LINQ,
Вышеуказанный метод возвращает список ошибок проверки.
Дальнейшее чтение :
Как прочитать все ошибки из ModelState в ASP.NET MVC
источник
Во время отладки я считаю полезным поместить таблицу внизу каждой из моих страниц, чтобы показать все ошибки ModelState.
источник
Как я обнаружил, следуя рекомендациям в приведенных выше ответах, вы можете получить исключения, возникающие без установки сообщений об ошибках, поэтому для выявления всех проблем вам действительно нужно получить и ErrorMessage, и Exception.
или как метод расширения
источник
В случае, если кто-то хочет вернуть имя свойства модели для привязки сообщения об ошибке в строго типизированном представлении.
Таким образом, вы можете связать ошибку с полем, которое выдало ошибку.
источник
Вывод только сообщений об ошибках сам по себе был недостаточен, но это помогло.
источник
На всякий случай, если кому-то это нужно, я сделал и использую следующий статический класс в своих проектах.
Пример использования:
Usings:
Учебный класс:
источник
И это тоже работает:
источник
SelectMany
он доступен.Полезно для передачи массива сообщений об ошибках в View, возможно, через Json:
источник
Это расширяется после ответа от @Dunc. Смотрите комментарии в формате XML
источник
Кроме того,
ModelState.Values.ErrorMessage
может быть пустым, ноModelState.Values.Exception.Message
может указывать на ошибку.источник
В вашей реализации вам не хватает статического класса, это должно быть.
скорее
источник
просто используйте asp-validation-summary Tag Helper
источник