ModelState.IsValid是假的 - 但是哪一个 - 简单的方法

时间:2014-06-27 13:48:52

标签: asp.net-mvc c#-4.0 visual-studio-2012

在ASP.NET MVC中,当我们使用某些数据调用post操作时,我们检查ModelState,如果出现一些验证错误,它将是最糟糕的。对于较大的“输入用户信息”表单,展开每个值并查看计数以查看哪个密钥(附加示例图像中的9)具有验证错误是令人讨厌的。想知道是否有人知道一个简单的方法来找出导致验证错误的元素。

enter image description here

4 个答案:

答案 0 :(得分:4)

我建议写一个方法:

namespace System.Web
{
    using Mvc;

    public static class ModelStateExtensions
    {
        public static Tuple<string, string> GetFirstError(this ModelStateDictionary modelState)
        {
            if (modelState.IsValid)
            {
                return null;
            }

            foreach (var key in modelState.Keys)
            {
                if (modelState[key].Errors.Count != 0)
                {
                    return new Tuple<string, string>(key, modelState[key].Errors[0].ErrorMessage);
                }
            }

            return null;
        }
    }
}

然后在调试期间打开立即窗口并输入:

ModelState.GetFirstError()

答案 1 :(得分:3)

在VS2015 +中,您可以在立即窗口中使用LINQ,这意味着您只需运行以下命令:

ModelState.SelectMany(
    x => x.Value.Errors, 
    (state, error) => $"{state.Key}:  {error.ErrorMessage}"
)

答案 2 :(得分:2)

听起来您正在寻找调试器增强功能。我最近在visual studio gallery中看到了这个产品。

http://visualstudiogallery.msdn.microsoft.com/16acdc63-c4f1-43a7-866a-67ff7022a0ac

我与他们没有任何关系,并且没有使用它。它也是一个试用版,并且不知道完整的东西需要花多少钱。

答案 3 :(得分:2)

如果您更专注于调试器方面,请使用OzCode的试用版。它通过用它自己的,更强大的调试工具提示替换常用的调试工具提示来增强Visual Studio IDE。很难用语言表达,查看他们的网站,他们在那里有一系列功能。

我已经玩了几个星期的测试版,它被证明是一个非常有价值的工具。您可以使用OzCode查询调试器中的数据。例如,您可以通过对ModelState集合进行过滤来查询Values中的项目。