You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

商品添加与编辑模块验证失效问题求助

商品添加/编辑功能验证失效问题排查与解决

问题说明

在商品添加和编辑功能中,已为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:27:16