c# - ASP.NET MVC 如何将 ModelState 错误转换为 json

标签 c# asp.net-mvc linq modelstate

如何获得所有 ModelState 错误消息的列表?我发现这段代码可以获取所有 key : ( Returning a list of keys with ModelState errors )

var errorKeys = (from item in ModelState
        where item.Value.Errors.Any() 
        select item.Key).ToList();

但是我如何将错误消息作为 IList 或 IQueryable 获取?

我可以去:

foreach (var key in errorKeys)
{
    string msg = ModelState[error].Errors[0].ErrorMessage;
    errorList.Add(msg);
}

但那是手动完成的 - 肯定有一种使用 LINQ 来完成的方法吗? .ErrorMessage 属性位于链的下游,我不知道如何编写 LINQ...

最佳答案

你可以把任何东西放在select里面子句:

var errorList = (from item in ModelState
        where item.Value.Errors.Any() 
        select item.Value.Errors[0].ErrorMessage).ToList();

编辑:您可以通过添加 from 将多个错误提取到单独的列表项中子句,像这样:

var errorList = (from item in ModelState.Values
        from error in item.Errors
        select error.ErrorMessage).ToList();

或者:

var errorList = ModelState.Values.SelectMany(m => m.Errors)
                                 .Select(e => e.ErrorMessage)
                                 .ToList();

第 2 编辑: 您正在寻找 Dictionary<string, string[]> :

var errorList = ModelState.ToDictionary(
    kvp => kvp.Key,
    kvp => kvp.Value.Errors.Select(e => e.ErrorMessage).ToArray()
);

关于c# - ASP.NET MVC 如何将 ModelState 错误转换为 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2845852/

相关文章:

c# - 使用 LINQ 搜索树

c# - 通过 linq 在列表中查找索引

c# - 无法将类型 'System.Attribute' 转换为泛型参数 'T' - 为什么?

c# - 使用knockoutjs过滤有界项目

asp.net-mvc - 如何更改 ASP.NET MVC URL 中的 Controller 文本?

asp.net-mvc - 将数据对象临时保存在 MVC Controller 、MVC、MVC Controller 临时存储中

c# - 计算有多少项目出现在具有特定 ID 的项目之前

c# - ASP.NET 图表控件,是否可以在饼图上使用渐变?

c# - 有没有办法在调用变量名时使用字符串?

c# - Windows 服务中的 Console.WriteLine()?