即使用户输入的数据没有错误,我的模型状态也始终无效

时间:2012-07-09 09:40:18

标签: asp.net-mvc asp.net-mvc-3 telerik-mvc asp.net-mvc-3-areas

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

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

谢谢

6 个答案:

答案 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)

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