我正在收到如下错误列表: {错误:[“需要电子邮件”,“需要名字”]}
我该如何修改它,以获得带有字段名称的列表?
public static IEnumerable ExtractErrorMessages(this ModelStateDictionary modelState)
{
return modelState.Values.SelectMany(m => m.Errors).Select(e => e.ErrorMessage).ToList();
}
结果必须是这样的: {“名字”:[“必须输入名字”],“电子邮件”:[“需要电子邮件”]}
答案 0 :(得分:3)
ModelState
可以像字典一样使用。它有一个ModelState.Keys
集合,可以告诉您字段名称。
IDictionary<string, string[]> errorsByField = new Dictionary<string, string[]>();
foreach (var key in ModelState.Keys) {
if (ModelState[key].Errors.Any()) {
var errors = ModelState[key].Errors.Select(e => e.ErrorMessage).ToArray();
errorsByField.Add(key, errors);
}
}
请注意,Keys
是由ModelBinder绑定的<input>
的名称,即,它对应于ViewModel中属性的名称。这不是此属性的[DisplayName]
。要获取DisplayName,您将必须在ViewModel上使用反射来获取此属性的属性值,然后使用ResourceManager
对其进行翻译。