Как получить сообщения об ошибках (на стороне сервера) с именами полей? - PullRequest
0 голосов
/ 11 декабря 2018

Я получаю список ошибок, подобный этому: {error: ["E-mail требуется", "Имя необходимо"]}

Как мне нужно изменить это, чтобы получитьсписок с именами полей?

public static IEnumerable ExtractErrorMessages(this ModelStateDictionary modelState)
    {
        return modelState.Values.SelectMany(m => m.Errors).Select(e => e.ErrorMessage).ToList();
    }

Результат должен быть таким: {"FirstName": ["Имя необходимо"], "Email": ["Адрес электронной почты требуется"]}

1 Ответ

0 голосов
/ 11 декабря 2018

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...