ModelState
можно использовать как словарь.Он имеет коллекцию ModelState.Keys
, которая сообщает вам имена полей.
IDictionary<string, string[]> errorsByField = new Dictionary<string, string[]>();
foreach (var key in ModelState.Keys) {
if (ModelState[key].Errors.Any()) {
var errors = ModelState[key].Errors.Select(e => e.ErrorMessage).ToArray();
errorsByField.Add(key, errors);
}
}
Обратите внимание, что Keys
- это имена <input>
, связанные с ModelBinder, т. Е. Это соответствует именисвойство в ViewModel.Это не [DisplayName]
этого свойства.Чтобы получить DisplayName, вам нужно будет использовать отражение в ViewModel, чтобы получить значение атрибута для этого свойства, а затем перевести его, используя ResourceManager
.