如何使用字段名称检索错误消息(服务器端)?

时间:2018-12-11 08:47:58

标签: c# asp.net asp.net-core

我正在收到如下错误列表: {错误:[“需要电子邮件”,“需要名字”]}

我该如何修改它,以获得带有字段名称的列表?

public static IEnumerable ExtractErrorMessages(this ModelStateDictionary modelState)
    {
        return modelState.Values.SelectMany(m => m.Errors).Select(e => e.ErrorMessage).ToList();
    }

结果必须是这样的: {“名字”:[“必须输入名字”],“电子邮件”:[“需要电子邮件”]}

1 个答案:

答案 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对其进行翻译。