商品添加与编辑模块验证失效问题求助
商品添加/编辑功能验证失效问题排查与解决
问题说明
在商品添加和编辑功能中,已为ProductViewModel和ItemViewModel的对应字段添加[Required]特性,但验证功能未生效。当所有字段为空并点击提交按钮时,系统直接抛出错误。
相关ViewModel代码
ProductViewModel
[Required(ErrorMessage = "لطفا {0} را وارد کنید.")] [StringLength(27, ErrorMessage = "کد پستی باید 10 رقمی باشد.", MinimumLength = 5)] [DisplayName("نام و نام خانوادگی")] public string Name { get; set; } [Required(ErrorMessage = "لطفا {0} را وارد کنید.")] [StringLength(97, ErrorMessage = "کد پستی باید 10 رقمی باشد.", MinimumLength = 10)] [DisplayName("توضیحات")] public string Description { get; set; }
ItemViewModel
[Required(ErrorMessage = "لطفا {0} را وارد کنید.")] [DisplayName("قیمت")] public int Price { get; set; } [Required(ErrorMessage = "لطفا {0} را وارد کنید.")] [DisplayName("تعداد")] public int QuantityInStock { get; set; }
错误信息截图

解决方案
1. 修正值类型字段的验证逻辑
Price和QuantityInStock是int值类型,默认值为0,[Required]特性对值类型无效(永远不会为null)。需改为可空值类型,才能触发空值验证:
[Required(ErrorMessage = "请输入{0}。")] [DisplayName("价格")] public int? Price { get; set; } [Required(ErrorMessage = "请输入{0}。")] [DisplayName("库存数量")] public int? QuantityInStock { get; set; }
2. 控制器中主动检查模型有效性
在提交接口中,先判断ModelState.IsValid,无效则返回视图,阻止后续逻辑执行:
[HttpPost] public IActionResult Create(ProductViewModel product, ItemViewModel item) { if (!ModelState.IsValid) { return View(product); // 返回对应视图展示错误 } // 执行保存等业务逻辑 return RedirectToAction("Index"); }
3. 修正验证特性的错误提示
现有代码中[StringLength]的错误提示与字段不匹配(如Name字段提示邮政编码相关内容),需修正为对应字段的提示:
[Required(ErrorMessage = "请输入{0}。")] [StringLength(27, ErrorMessage = "{0}长度需在5-27位之间。", MinimumLength = 5)] [DisplayName("姓名")] public string Name { get; set; } [Required(ErrorMessage = "请输入{0}。")] [StringLength(97, ErrorMessage = "{0}长度需在10-97位之间。", MinimumLength = 10)] [DisplayName("描述")] public string Description { get; set; }
4. 确保视图正确渲染验证错误
在视图的每个字段下方添加验证错误显示标签,并引入客户端验证脚本:
<!-- 字段示例 --> <div class="form-group"> <label asp-for="Name"></label> <input asp-for="Name" class="form-control" /> <span asp-validation-for="Name" class="text-danger"></span> </div> <!-- 客户端验证脚本 --> <script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script> <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
内容的提问来源于stack exchange,提问作者AmirDashti
相关产品推荐
相关产品推荐

