ASP.NET ModelState如何获取DataAnnotations的ErrorMessage

在 ASP.NET MVC 中,当使用 DataAnnotations 为模型属性添加验证时,可以通过 ModelState 获取验证失败的错误信息(即 ErrorMessage)。

假设有一个模型类,并且使用了 DataAnnotations 特性,例如:

using System.ComponentModel.DataAnnotations;

public class UserModel
{
    [Required(ErrorMessage = "用户名是必填项")]
    [StringLength(50, ErrorMessage = "用户名长度不能超过 50 个字符")]
    public string Username { get; set; }
    
    [Range(18, 100, ErrorMessage = "年龄必须在 18 到 100 之间")]
    public int Age { get; set; }
}

在控制器中,当模型绑定或验证失败时,可以从 ModelState 中提取这些错误信息。

获取 ModelState 中的错误信息

可以使用以下代码获取 ModelState 中所有验证失败的 ErrorMessage:

using Microsoft.AspNetCore.Mvc;
using System.Linq;

public class UserController : Controller
{
    [HttpPost]
    public IActionResult Submit(UserModel model)
    {
        if (!ModelState.IsValid)
        {
            // 获取所有错误消息
            var errorMessages = ModelState.Values
                                          .SelectMany(v => v.Errors)
                                          .Select(e => e.ErrorMessage)
                                          .ToList();

            // 输出错误消息
            foreach (var errorMessage in errorMessages)
            {
                Console.WriteLine(errorMessage);
            }
            
            // 例如返回错误消息到视图
            ViewBag.Errors = errorMessages;
            return View(model);
        }

        // 如果验证成功,继续处理
        return RedirectToAction("Success");
    }
}

代码说明

ModelState.Values:获取 ModelState 中所有字段的状态。

SelectMany(v => v.Errors):对每个字段的错误进行展开,以获取所有错误。

Select(e => e.ErrorMessage):从每个错误中提取 ErrorMessage。

此方法可以在验证失败时收集所有的 ErrorMessage 并进行输出或返回给视图进行展示。

评论