Как получить все ошибки из ASP.Net MVC modelState? - PullRequest
401 голосов
/ 30 августа 2009

Я хочу получить все сообщения об ошибках из modelState, не зная значений ключей. Проход по циклу, чтобы получить все сообщения об ошибках, которые содержит ModelState.

Как я могу это сделать?

Ответы [ 15 ]

4 голосов
/ 31 июля 2012

И это тоже работает:

var query = from state in ModelState.Values
    from error in state.Errors
    select error.ErrorMessage;
var errors = query.ToArray(); // ToList() and so on...
2 голосов
/ 25 марта 2013

Полезно для передачи массива сообщений об ошибках в View, возможно, через Json:

messageArray = this.ViewData.ModelState.Values.SelectMany(modelState => modelState.Errors, (modelState, error) => error.ErrorMessage).ToArray();
2 голосов
/ 01 октября 2012

Кроме того, ModelState.Values.ErrorMessage может быть пустым, но ModelState.Values.Exception.Message может указывать на ошибку.

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

Я не знаю, что является проблемой в моем случае, иногда я получаю сообщение в секции ErrorMessage ModelState, а иногда в сообщении об исключении ошибки ModelState.

Следовательно, я создал метод, который может работать с обоими сценариями. Надеюсь, это поможет всем здесь ..

public static string GetErrorMessageFromModelState(ModelStateDictionary modelState)
    {
        string errorMessage = string.Empty;

        try
        {
            string[] errorMessageList = (from m in modelState
                                         where m.Value.Errors.Count > 0
                                         select string.Join(", ", m.Value.Errors.Select(x =>
                                         !string.IsNullOrEmpty(x.ErrorMessage) ? x.ErrorMessage : !string.IsNullOrEmpty(x.Exception.Message) ?
                                         x.Exception.Message.Split('\'').Length > 0 ? x.Exception.Message.Split('\'')[1].ToString() : m.Key.Split('.').Length > 1 ?
                                         m.Key.Split('.')[1] : m.Key.Split('.')[0] : m.Key.Split('.')[0]))).ToArray();

            errorMessage = string.Format("Error in Field(s): " + string.Join(", ", errorMessageList) + " {0} required.", (errorMessageList.Count() > 1 ? "are" : "is"));
        }
        catch (Exception ex)
        {
            errorMessage = ex.Message;
            if (ex.InnerException != null)
                errorMessage += Environment.NewLine + ex.InnerException;
        }

        return errorMessage;
    }
0 голосов
/ 22 июня 2015

В вашей реализации вам не хватает статического класса, это должно быть.

if (!ModelState.IsValid)
{
    var errors =  ModelStateErrorHandler.GetModelErrors(this.ModelState);
    return Json(new { errors });
}

а

if (!ModelState.IsValid)
{
    var errors = ModelState.GetModelErrors();
    return Json(new { errors });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...