ASP.NET Core编辑表单点击保存时ID未传递到Controller问题求助
问题根因
表单提交的字段名与Post Action接收的参数名不匹配,导致ASP.NET Core模型绑定失败,返回默认值0。
你的视图中定义了隐藏字段<input type="hidden" asp-for="ID" />,渲染后生成的HTML为<input type="hidden" name="ID" value="实际ID值" />,提交表单时传给后端的字段名为ID,但你的Post方法接收参数为int orgId,二者名称不一致,模型绑定无法匹配到对应值,因此orgId被赋值为值类型的默认值0。
返回按钮可以正常传值的原因是,返回链接通过asp-route-orgId="@ViewBag.orgId"生成的URL参数名与目标Action接收的参数名完全匹配,因此可以正常拿到值。
解决方法
你可以任选以下任意一种方案修复:
方案1:修改Post Action的参数名
将Post方法的参数名改为和表单字段一致的ID:
[HttpPost, ActionName("OrgEdit")] [ValidateAntiForgeryToken] public async Task<IActionResult> OrgEdit(int ID) { // 原有逻辑保持不变 }
方案2:修改视图隐藏字段的name属性
将视图中的隐藏字段指定name为orgId,和Action参数名匹配:
<input type="hidden" name="orgId" asp-for="ID" />
方案3:直接接收模型参数(更推荐)
因为视图本身是强类型绑定Organisations模型,你可以直接修改Post方法接收完整模型,无需单独传ID:
[HttpPost, ActionName("OrgEdit")] [ValidateAntiForgeryToken] public async Task<IActionResult> OrgEdit(Organisations org) { if (org.ID == 0) { return NotFound(); } var orgToUpdate = await _context.Organisations.FirstOrDefaultAsync(s => s.ID == org.ID); // 后续原有逻辑保持不变 }
内容的提问来源于stack exchange,提问作者n.b
相关产品推荐
相关产品推荐

