如何获取所有ModelState错误消息的列表?我找到了这个代码来获取所有密钥:(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 ...
13 回答
你可以在
select
子句中放入你想要的任何东西:EDIT :您可以通过添加
from
子句将多个错误提取到单独的列表项中,如下所示:要么:
2nd EDIT :您正在寻找
Dictionary<string, string[]>
:变量与返回类型而不是返回IEnumerable
这是完整的实现,所有部分放在一起:
首先创建一个扩展方法:
然后调用该扩展方法并将控制器操作中的错误(如果有)作为json返回:
最后,在客户端显示这些错误(以jquery.validation样式,但可以轻松更改为任何其他样式)
我喜欢在这里使用
Hashtable
,这样我就可以获得JSON对象,其属性为键,错误为字符串数组形式的值 .这样你得到以下回应:
有很多不同的方法可以做到这一点 . 现在我这样做......
@JK它给了我很多帮助,但为什么不呢:
看看System.Web.Http.Results.OkNegotiatedContentResult .
它会将您投入的任何内容转换为JSON .
所以我这样做了
这导致:
我还没检查当每个字段有多个错误时会发生什么,但关键是OkNegoriatedContentResult很棒!
从@SLaks获得了linq / lambda的想法
最简单的方法是使用ModelState本身返回
BadRequest
:例如
PUT
:如果我们在例如使用数据注释
Update
课程中的手机号码,如下所示:这将在无效请求中返回以下内容:
ToDictionary是在System.Web.Extensions dll http://msdn.microsoft.com/en-us/library/system.linq.enumerable.todictionary.aspx中打包的System.Linq中找到的Enumerable扩展 . 这是完整的课程对我来说的样子 .
为什么不将原始
ModelState
对象返回给客户端,然后使用jQuery读取值 . 对我来说它看起来更简单,并使用通用数据结构(.net的ModelState
)将
ModelState
作为Json返回,只需将其传递给Json类构造函数(与ANY对象一起使用)C#:
JS:
通过使用内置功能实现此目的的简单方法
JSON result will be
我做了和扩展,返回字符串与分隔符“”(你可以使用自己的):
如果你使用jsonresult然后返回
或者你可以简单地返回modelStateErrors,我还没试过 . 我所做的是将Errors集合分配给我的ViewModel然后循环它 . 在这种情况下,我可以通过json返回我的错误 . 我有一个类/模型,我想得到源/密钥,但我仍然想弄明白 .