ASP.NET Core MVC中[Required]特性的服务端验证实现指引
ASP.NET Core MVC 服务端[Required]验证实现方案
问题根源
服务端验证未生效的核心原因是控制器Post方法未主动检查模型验证状态,ASP.NET Core不会自动拦截无效请求,必须手动触发验证并处理结果。
解决步骤
1. 修改控制器Post方法,添加模型验证逻辑
在Create的Post方法中,先判断ModelState.IsValid,验证失败时返回原视图,错误信息会自动绑定到视图的验证标签中:
public class EmployeeController : Controller { List<Employee> emplist = new List<Employee>(); // 其他方法保持不变 [HttpPost] public IActionResult Create(Employee emp) { // 检查模型验证结果 if (!ModelState.IsValid) { // 验证失败,返回创建视图,保留用户输入并显示错误 return View(emp); } // 验证通过,添加数据到列表 emplist.Add(emp); return RedirectToAction("Index"); } }
2. 修正视图语法错误
视图中lastname字段的asp-for和asp-validation-for缺少引号,会导致验证消息绑定失败,修改后:
<div class="form-group row"> <label class="col-sm-2" asp-for="lastname">Last Name</label> <input type="text" class="col-sm-4" asp-for="lastname" /> <span asp-validation-for="lastname" style="color:red"></span> </div>
3. 模型验证特性说明(规范优化)
Name是非可空string(.NET 6+启用Nullable后),本身已禁止null,[Required(AllowEmptyStrings = false)]进一步限制空字符串,配合[MinLength(2)]确保输入长度合规。lastname是可空string,[Required(AllowEmptyStrings = false)]同时禁止null和空字符串,满足必填要求。
验证效果
提交空值或不符合规则的输入时,控制器会检测到ModelState无效,返回创建视图,页面上的<span asp-validation-for>标签会自动显示对应的错误提示(比如“此字段是必填项”或“字段Name必须至少包含2个字符”)。
内容的提问来源于stack exchange,提问作者user12589647
相关产品推荐
相关产品推荐

