Иногда может случиться, что где-то внутри сборки MVC выдается ошибка, которая неправильно обрабатывается и не копируется в состояние вашей модели, как ожидалось. Затем, когда вы пытаетесь отобразить в своем представлении Html.ValidationSummary
, это не покажет вам ошибку, которая может быть очень запутанной. Один пример, который может привести к сбою процесса связывания модели, который я написал о здесь . Обычно, после того, как вы выясните, почему это происходит, вы можете внести исправления в свой код и больше не беспокоиться об этом.
У меня есть следующий код, который я использую для проверки во время отладки, чтобы позволить мне навести курсор на него в точке останова и посмотреть, что на самом деле происходит:
public static IDictionary<string, string> GetModelStateErrors(this ViewDataDictionary viewDataDictionary)
{
Dictionary<string, string> dict = new Dictionary<string, string>();
foreach (var modelStateKey in viewDataDictionary.ModelState.Keys)
{
var modelStateValue = viewDataDictionary.ModelState[modelStateKey];
foreach (var error in modelStateValue.Errors)
{
var errorMessage = error.ErrorMessage;
var exception = error.Exception;
if (!String.IsNullOrEmpty(errorMessage))
{
dict.Add(modelStateKey, "Egads! A Model Error Message! " + errorMessage);
}
if (exception != null)
{
dict.Add(modelStateKey, "Egads! A Model Error Exception! " + exception.ToString());
}
}
}
return dict;
}
Затем я могу вставить это после того, как попробую UpdateModel, и установить для него точку останова:
var x = ViewData.GetModelStateErrors();
Поставьте это сразу после вашего звонка на UpdateModel
. При наведении курсора на x
вы увидите любые необработанные исключения в процессе привязки модели, если в этом и заключается проблема.
Удачи!