ASP.NET Core Razor页面StringLength验证不生效问题排查
问题分析与修复方案
你的代码存在两个关键问题,导致StringLength验证的错误提示无法正常显示:
1. 验证标签的属性名拼写错误
视图里的验证提示span标签中,asp-validation-for写的是Students.tName,但你的Student模型里对应的属性是Name(多了个多余的t前缀)。这个拼写错误让验证框架找不到对应的验证规则,自然不会弹出错误提示。
修复后的span标签代码:
<span asp-validation-for="Students.Name" class="message"></span>
2. 确保完整启用验证流程
除了修正拼写,还要确认你的Razor页面应用已经配置了必要的验证机制:
- 客户端验证:确保页面引入了jQuery和验证相关脚本(默认模板会自带,要是手动删了就得加回来):
<script src="~/lib/jquery/dist/jquery.min.js"></script> <script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script> <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script> - 服务器端验证:在页面的Post处理方法里,要先检查
ModelState.IsValid,验证不通过就返回当前页面,触发错误提示:public IActionResult OnPost() { if (!ModelState.IsValid) { return Page(); } // 后续保存逻辑 return RedirectToPage("./Index"); }
补充说明
用asp-for生成输入框时,框架会自动加maxlength="20"限制输入长度,但如果用户通过浏览器控制台修改这个属性并提交超长内容,服务器端验证会拦截,这时候修正后的验证标签就会显示你定义的错误信息:"Name length must be between 2 and 20."
内容的提问来源于stack exchange,提问作者zbx888
相关产品推荐
相关产品推荐

