2

嗨,我的控制器中有一个方法,并且有以下代码

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 部分,这意味着模型状态是无效的。如何检查页面中的错误在哪里,我可以添加什么代码来显示页面中的错误在哪里。

谢谢

4

6 回答 6

3

你可以通过下面的代码来遍历模型状态集合,通过调试,你会看到,你的代码将进入 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
于 2012-07-09T12:52:11.323 回答
1

问题很可能出在模型中未显示在视图中的字段中。如果您正在执行验证,请在页面上放置验证摘要。(指定不应抑制字段级错误。)这将向您显示所有错误,包括那些不属于可见字段的错误。

于 2012-07-09T12:31:53.463 回答
0

上次我遇到这样的问题是因为有些东西不应该是空的。

在你说的那一行的代码中放置一个断点:

   if (modelState.IsValid)

您可以通过深入到 modelState 找到代码的哪一部分有错误。你应该能够从那里解决它。

于 2012-07-09T09:45:10.593 回答
0

您可以通过执行以下操作来检查错误所在。

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

        }
于 2016-05-14T23:49:45.230 回答
0

请查看此图像向下钻取模型状态 1) 选择值 2) 向下钻取每个成员并查找错误

请找到图片链接并查看@RBT

于 2017-01-04T06:36:17.393 回答
-3

创建视图时自动生成字段并复制所需字段,然后根据需要隐藏其中一些字段

于 2017-03-30T09:49:19.533 回答