12

我使用 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);
    }  
}

谢谢

4

3 回答 3

34

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

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

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

于 2011-04-01T08:32:18.720 回答
2

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

var errors = from v in ModelState.Values 
             where v.Errors.Count > 0 
             select v.Errors;
于 2011-04-01T08:41:16.317 回答
0

所以发布

基于@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);
                }
            } 
于 2012-05-04T20:48:32.727 回答