AJAX调用ASP.NET Core控制器GET方法无法接收Id参数问题咨询
问题根本原因
你构造请求URL时使用的路由参数名与控制器方法接收的参数名不匹配,导致ASP.NET Core模型绑定无法正确映射参数:
@Url.Action中你传入的路由参数为new {id=user.UserId },最终生成的请求URL带的参数为?id=xxx- 但控制器
Manage方法的入参命名为string userId,二者名称不一致,绑定失败就会返回null值
你之前用 asp-route-UserId 写法可以正常运行,就是因为参数名和控制器入参完全对齐,所以绑定正常。
修复方案(二选一即可)
方案1:修改Url.Action的路由参数名和控制器入参对齐
调整按钮中Url.Action的参数名,把id改成userId:
<a class="btn btn-primary" onclick="manageRolePopup('@Url.Action("Manage","Role", new {userId=user.UserId },Context.Request.Scheme)')">Manage Roles</a>
方案2:修改控制器方法的入参名和URL参数对齐
调整控制器方法的入参名,把userId改成id:
[HttpGet] public async Task<IActionResult> Manage(string id) { var user = await _userManager.FindByIdAsync(id); // 其余原有逻辑无需改动 }
排查小技巧:点击按钮时打开浏览器F12开发者工具的「网络」标签,查看对应AJAX请求的完整URL,就能直观看到携带的参数名和值,快速定位不匹配问题。
内容的提问来源于stack exchange,提问作者zarpat
相关产品推荐
相关产品推荐

