您好我的控制器中有一个方法,并且有以下代码
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
每次页面运行时,它总是转到else部分,这意味着模型状态无效。 如何检查页面中的错误位置,我可以添加哪些代码来显示页面中的错误位置。
谢谢
答案 0 :(得分:3)
您可以通过以下代码浏览modelstate集合,通过对此进行修改,您将看到,您的代码将进入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
答案 1 :(得分:1)
问题很可能出在模型中未在视图中显示的字段中。如果您正在执行验证,请在页面上放置验证摘要。 (指定不应禁止字段级错误。)这将显示所有错误,包括那些不属于可见字段的错误。
答案 2 :(得分:0)
上次我遇到这样的问题是因为某些东西是空的,不应该是。
在您的代码中的代码中放置一个断点:
if (modelState.IsValid)
通过向下钻取到modelState,您可以找到代码的哪个部分有错误。你应该能够从那里开始工作。
答案 3 :(得分:0)
您可以通过执行以下操作来检查错误的位置。
var errors = ModelState.Values.SelectMany(v => v.Errors);
if (ModelState.IsValid)
{
}
答案 4 :(得分:0)
Please see this image 深入了解模型状态 1)选择值 2)向下钻取每个成员并查找错误
请找到图片链接,看看 @RBT
答案 5 :(得分:-3)
创建视图时自动生成字段并复制所需字段,然后根据需要隐藏其中一些