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

ASP.NET Core MVC确认密码字段始终返回模型状态错误问题

问题原因及解决方案

核心问题

你手动给确认密码输入框指定了name="confirm-password",但模型里对应的属性是Confirmpassword,ASP.NET的模型绑定无法将带连字符的请求参数名映射到驼峰/帕斯卡命名的属性上,导致后端接收的Confirmpassword值为空。即便你前端输入了内容,后端模型里这个字段仍是空值,自然触发[Required]和[Compare]的验证错误。

另外你同时使用了asp-for="Confirmpassword"和手动指定name,这会覆盖asp-for自动生成的正确name属性,彻底破坏模型绑定的匹配逻辑。

修复步骤

  1. 移除确认密码输入框的手动name属性
    修改表单中确认密码部分的代码,删掉name="confirm-password",只保留asp-for="Confirmpassword",让框架自动生成正确的name属性:
<div class="mb-3">
    <label for="confirm-password" class="form-label">Confirm Password</label>
    <input type="password" class="form-control" id="confirm-password" asp-for="Confirmpassword" required>
    <span class="text-danger" style="color:red" asp-validation-for="Confirmpassword"></span>
</div>
  1. 统一规范其他字段写法(可选但推荐)
    其他字段如用户名、邮箱、密码,也建议只保留asp-for属性,删掉手动指定的name和id,让框架自动生成匹配的属性值,避免类似绑定错误:
    比如用户名部分可修改为:
<div class="mb-3">
    <label class="form-label" asp-for="username"></label>
    <input type="text" class="form-control" asp-for="username" required>
    <span class="text-danger" style="color:red" asp-validation-for="username"></span>
</div>

asp-for会自动生成正确的id、name,甚至标签文本也能通过asp-for关联,减少手动维护的错误。

验证逻辑说明

修复后,后端能正确接收到Confirmpassword的值,[Compare("Password")]会正常对比两次输入的密码是否一致,[Required]也能正确判断字段是否为空,验证逻辑即可正常工作。

内容的提问来源于stack exchange,提问作者user23633404

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:35:22