ASP.NET Core合并增改页面时更新误创建新记录问题
问题原因及解决方案
核心问题
你的更新操作始终创建新记录,是因为View中硬编码了Id的隐藏输入框值为0,覆盖了模型绑定的真实Id:
<input asp-for="Id" hidden value="0" />
无论编辑页面加载时Product的Id是多少,提交到后台的Id都会被强制设为0,导致Post方法中product.Id == 0判断成立,执行Add操作而非Update。
修复步骤
修改View中的隐藏Id输入框,移除硬编码的value="0",让asp-for标签助手自动根据模型值生成正确的输入框值:
<input asp-for="Id" hidden />
验证效果
- 创建模式:Id默认值为0,隐藏框会自动填充0,提交后执行新增逻辑。
- 编辑模式:页面加载时模型携带的Id会被自动填充到隐藏框,提交后后台能接收到正确的Id,执行更新逻辑。
额外优化建议
- 修正页面标题,根据操作类型动态显示:
<h2 class="text-white py-2">@(Model.Id == 0 ? "创建产品" : "编辑产品")</h2>
当前标题写的是"Update Category",和产品管理的场景不符。
- 提交按钮文本也可以动态调整:
<button type="submit" class="btn btn-primary form-control">@(Model.Id == 0 ? "创建" : "更新")</button>
内容的提问来源于stack exchange,提问作者Miran
相关产品推荐
相关产品推荐

