【问题标题】:C# .NET MVC3 ModelState.IsValidC# .NET MVC3 ModelState.IsValid
【发布时间】:2011-07-27 12:25:59
【问题描述】:

我使用 JSON 从表单发布数据并且 ModelState.isValid() 返回 false,我为所有传入数据放置了一个 WriteLine,并且所有数据看起来都很好,有没有办法显示模型状态错误以找出什么是不验证? 这个确切的代码适用于其他模型

[HttpPost]
public ActionResult mobileCreateAction(Trip trip)
{
    if (ModelState.IsValid)
    {
        System.Diagnostics.Debug.WriteLine("saving");
        DB.Trips.Add(trip);
        DB.SaveChanges();
        return Json(new
        {
            success = true,
            msg = "Success saving trip"
        });
    }
    else
    {
        System.Diagnostics.Debug.WriteLine("invalid model state");
        return Json(new
        {
            success = false,
            msg = "Error saving trip"
        }, JsonRequestBehavior.AllowGet);
    }  
}

谢谢

【问题讨论】:

    标签: asp.net-mvc-3 modelstate


    【解决方案1】:

    SO Post

    以@Darin 的回答为基础,上面链接的帖子提供了显示“为什么”消息所需的代码。

     foreach (var obj in ModelState.Values)
                {
                    foreach (var error in obj.Errors)
                    {
                        if (!string.IsNullOrEmpty(error.ErrorMessage))
                            System.Diagnostics.Debug.WriteLine("ERROR WHY = " + error.ErrorMessage);
                    }
                } 
    

    【讨论】:

      【解决方案2】:

      您可以在 ModelState.Values 集合中找到错误。每个值都有一个 Errors 集合,其中包含该属性的所有模型错误。

      var errors = from v in ModelState.Values 
                   where v.Errors.Count > 0 
                   select v.Errors;
      

      【讨论】:

        【解决方案3】:

        获取模型状态下的错误列表:

        var errors = ModelState
            .Where(x => x.Value.Errors.Count > 0)
            .Select(x => new { x.Key, x.Value.Errors })
            .ToArray();
        

        然后在这一行设置一个断点并检查errors 变量。它将为您提供模型上的属性列表以及它们各自的错误。

        【讨论】:

        • 当我打印错误时我得到这个值:f__AnonymousType1`2[System.String,System.Web.Mvc.ModelErrorCollection],知道这意味着什么吗?
        • 该行输出具有两个属性(键和错误)的匿名对象数组。尝试访问这些属性并打印出来。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-15
        相关资源
        最近更新 更多