Назначение ModelState.AddModelError с параметром исключения - PullRequest
6 голосов
/ 22 сентября 2010

Есть ли применение для перегрузки AddModelError (), которая принимает исключение в качестве параметра?

Если я включу следующий код в мой контроллер:

ModelState.AddModelError( "", new Exception("blah blah blah") );
ModelState.AddModelError( "", "Something has went wrong" );

if (!ModelState.IsValid)
    return View( model );

И, на мой взгляд, следующее:

<%= Html.ValidationSummary( "Please correct the errors and try again.") %>

Тогда в сводке ошибки отображается только текст "Что-то пошло не так".

1 Ответ

3 голосов
/ 22 сентября 2010

Проверка исходного кода ModelError принимает и то и другое, и используется для сбоев преобразования типов моделей.

В этом конкретном случае необходимо спуститься вниз по дереву исключений и получить внутренние исключения, когда необходимо найти фактическую корневую ошибку, а неуниверсальное сообщение об исключении верхнего уровня.

foreach (ModelError error in modelState.Errors.Where(err => String.IsNullOrEmpty(err.ErrorMessage) && err.Exception != null).ToList()) {
    for (Exception exception = error.Exception; exception != null; exception = exception.InnerException) {
        if (exception is FormatException) {
            string displayName = propertyMetadata.GetDisplayName();
            string errorMessageTemplate = GetValueInvalidResource(controllerContext);
            string errorMessage = String.Format(CultureInfo.CurrentCulture, errorMessageTemplate, modelState.Value.AttemptedValue, displayName);
            modelState.Errors.Remove(error);
            modelState.Errors.Add(errorMessage);
            break;
        }
    }
}

Как вы можете видеть, оно просматривает исключение в ModelError, чтобы найти исключение FormatException.Это единственная реальная ссылка на это, которую я могу найти как в MVC 2, так и в MVC 3.

Это говорит о том, что это, вероятно, не нужно для регулярного использования.

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