Состояние моей модели всегда недействительно, даже если в данных, введенных пользователем, нет ошибок

Привет у меня есть метод в моем контроллере и имеет следующий код

if (ModelState.IsValid)

{

    IDataOperations ops = DataSession.GetDataOperations(null);
    List<Department> dept = new List<Department>();
    ops.Load(dept);
    ops.Commit();
    int deptId = dept[dept.Count - 1].Id + 1;
    Department department = new Department()
    {
      Id = deptId,
      CompanyId = deptModel.CompanyId,
      Active = deptModel.Active,
      Name = deptModel.Name
    };

    ops.Create(department);
    ops.Commit();
    return RedirectToAction("CompanyDepartment", "Task");
}

else

{
  //some code

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

Спасибо

6 ответов

Вы можете просмотреть коллекцию состояний модели с помощью следующего кода, выполнив отладку, вы увидите, что ваш код войдет в цикл for, и вы сможете понять, в чем была ошибка.

#if DEBUG
       /// <summary> 
 /// Output the properties which are causing the issues when 
 /// the model is binding. 
 /// </summary>
  public static void ModelStateErrors (ModelStateDictionary modelState)
        {
            var errors = modelState.Where(a => a.Value.Errors.Count > 0)
                .Select(b => new { b.Key, b.Value.Errors })
                .ToArray();

            foreach (var modelStateErrors in errors)
            {
                 System.Diagnostics.Debug.WriteLine("...Errored When Binding.",                                  modelStateErrors.Key.ToString());

            }

        }
#endif

Скорее всего, проблема в поле вашей модели, которое не отображается в представлении. Если вы выполняете проверку, поместите сводку проверки на страницу. (Укажите, что ошибки на уровне поля НЕ должны подавляться.) Это покажет вам все ошибки, включая ошибки, которые не относятся к видимому полю.

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

var errors = ModelState.Values.SelectMany(v => v.Errors);
        if (ModelState.IsValid)
        {

        }

В прошлый раз у меня была такая проблема, потому что что-то было нулевым, чего не должно быть.

Поместите точку останова в своем коде в строку, где вы говорите:

   if (modelState.IsValid)

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

Пожалуйста, посмотрите это изображение, детализируйте состояние модели 1) выберите значение 2) просмотрите каждый элемент и найдите ошибку

пожалуйста, найдите ссылку на изображение и посмотрите @RBT

Создайте поле автоматически при создании представления и скопируйте необходимые поля, а затем сделайте некоторые из них скрытыми, как вы хотите

Другие вопросы по тегам