什么可能导致ViewData.ModelState.IsValid变为false

时间:2009-03-26 03:46:52

标签: asp.net-mvc

有些时候我发现我的ModelState无效,但由于没有ModelErrors,因此无法找到使其无效的内容。如果您自己没有添加ModelError,那么确定哪些模型状态无效的最简单方法是什么?

2 个答案:

答案 0 :(得分:36)

查看asp.net mvc source code,ModelStateDictionary上的IsValid属性只是返回true或false,具体取决于Values属性中保存的ModelState ICollection中是否存在任何错误。

您应该能够找到任何错误,包括消息和异常,如下所示:

foreach(var modelStateValue in ViewData.ModelState.Values)
{
    foreach(var error in modelStateValue.Errors)
    {
        // Do something useful with these properties
        var errorMessage = error.ErrorMessage;
        var exception = error.Exception;
    }
}

答案 1 :(得分:4)

我遇到了类似的问题,并且使用了Steve提供的相同类型的例程,发现在默认模型绑定器内的某个地方抛出了一个异常(非正常),但没有进入Html.ValidationSummary 。

特别是我遇到的问题是带有“是”或“否”选项的Dropbox,值为“1”和“0”(而不是“true”和“false”),并且模型Binder被阻塞尝试将这些转换为布尔值(我的实体的成员期望),声明0不是布尔值的有效值。

我希望会产生一条很好的消息,说明我的选择无效,但我被视为空的ValidationSummary。似乎异常被吞噬了! (现在我将来会注意这一点。)这或许可以作为一个错误提交给MS?