Состояние моей модели всегда недействительно, даже если в данных, введенных пользователем, нет ошибок
Привет у меня есть метод в моем контроллере и имеет следующий код
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
Создайте поле автоматически при создании представления и скопируйте необходимые поля, а затем сделайте некоторые из них скрытыми, как вы хотите