Иногда то, что может произойти ошибка брошена где-то внутри сборки MVC, который не обрабатывается хорошо, и который не копируется в вашу модель государства, как и ожидалось. Затем, когда вы пытаетесь отобразить в своем представлении Html.ValidationSummary
, он не показывает вам ошибку, которая может быть очень запутанной. Один пример, который может привести к сбою процесса привязки этой модели, я написал около here. Обычно, выяснив, почему это происходит, вы можете внести исправления в свой код и больше не беспокоиться об этом.
У меня есть следующий код, который я использую для проверки во время отладки, чтобы позволить мне парить над ним в контрольной точке и посмотреть, что происходит на самом деле:
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
покажет вам любые необработанные исключения в процессе привязки к модели, если это то, что действительно является проблемой здесь.
Удачи вам!
Не знаю, почему он не бросает ошибку не видя определение вашей модели объекта и набор ключей от FormCollection. Если вы переписываете его так, чтобы он использовал TryUpdateModel(), он возвращает false? does ModelState.IsValid() возвращает false? –
Вы используете соглашение, чтобы вступать в брак с именами полей на своей веб-странице с именами полей в вашей модели. Чтобы диагностировать, нам нужно было бы увидеть оба. –
Я также заметил, что страница редактирования даже не проверяет правильность после добавления метода .IsValid (который возвращает true). Он просто продолжается, как и данные в порядке и до сих пор не обновляется. общественного отдела Listone (интермедиат идентификатор) { вар = отдел из г в _dataContext.depts , где d.deptid == Идентификатор выберите д; отдел возврата. SingleOrDefault(); } – 2009-09-22 18:25:33