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

ASP.NET Core中asp-validation-for字段级错误信息无法显示问题

问题原因及解决方案

1. Tag Helper属性写法错误(最高概率)

你当前使用asp-for="@Model.PurchaseOrder"的写法不符合ASP.NET Core Tag Helper的规范,asp-for属性仅需直接传入模型的属性名即可,不需要加@Model.前缀。加前缀后会导致Tag Helper生成的表单字段name属性与你ModelState.AddModelError指定的键名PurchaseOrder不匹配,因此错误信息只能在汇总区域显示,无法匹配到对应字段的验证提示位置。
修正后的表单代码如下:

<form id="myForm" asp-area="myArea" asp-controller="myController" asp-action="myAction" data-ajax="true" method="post" enctype="multipart/form-data">
    <div asp-validation-summary="All" class="text-danger"></div>
    <!-- other html excluded for brevity -->
    <!-- 移除冗余的value属性,asp-for会自动绑定模型值 -->
    <input type="text" class="form-control input-sm customer-po" asp-for="PurchaseOrder" placeholder="enter customer po number" maxlength="50" />
    <span asp-validation-for="PurchaseOrder" class="text-danger"></span>
</form>

你之前尝试的@Html.ValidationMessageFor没有生效也是相同的字段名匹配问题。

2. AJAX提交返回逻辑问题

你给表单加了data-ajax="true"属性,说明用的是异步提交逻辑。如果后台的Error()方法返回的是JSON、状态码而非完整的表单视图,服务端写入ModelState的错误信息不会自动填充到前端的验证span中——只有重新渲染返回表单视图时,Tag Helper才会自动读取ModelState的错误填充对应位置。
可根据业务需求选择两种解决方式:

  • 方案一:验证失败时返回包含表单的局部视图,前端异步拿到结果后替换原有表单DOM,单字段错误会自动渲染。
  • 方案二:如果需要保留JSON返回格式,前端收到错误响应后手动写入对应字段的提示:
// 示例:假设错误返回结构为 { field: "PurchaseOrder", message: "PO is required to Approve order" }
$(`span[data-valmsg-for="${error.field}"]`).text(error.message);

3. 前端验证依赖排查

确认页面已按顺序引入以下三个依赖,缺少或顺序错误都会导致验证消息渲染异常:

  1. jQuery库
  2. jquery.validate.js
  3. jquery.validate.unobtrusive.js

内容的提问来源于stack exchange,提问作者Smitty-Werben-Jager-Manjenson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:06:06