ManageUser回发方法中UserId未传递始终为0,该如何修正?
问题分析与解决方案
核心问题
- 视图中用
location.href触发的是GET请求,但控制器处理删除逻辑的是[HttpPost]标记的方法,请求类型不匹配,导致参数无法正确绑定到Post方法。 - 控制器Post方法存在变量错误:
string status = action;里的action未定义,且RedirectToAction的参数传递方式错误。 - 图片按钮的
src属性指向CSS文件而非图标资源,会导致图标显示异常。
具体修正步骤
1. 修正视图代码(两种可选方案)
方案一:改用表单提交Post请求(推荐,符合REST规范)
把图片按钮嵌入表单,通过表单提交传递参数:
<form asp-action="ManageUser" asp-controller="ManageUsers" method="post" style="display:inline;"> <input type="hidden" name="executeAction" value="Delete" /> <input type="hidden" name="userId" value="@item.UserID" /> <input type="image" src="~/icons/bootstrap-icons-1.10.2/icons/check-circle-fill.svg" <!-- 修正为正确的图标文件路径 --> alt="删除用户" class="bi bi-check-circle-fill fs-6" aria-label="删除用户" /> </form>
方案二:改用Get请求触发删除(适合简单场景,不推荐用于删除操作)
如果坚持用location.href跳转,需将控制器的删除逻辑适配Get请求:
<input type="image" src="~/icons/bootstrap-icons-1.10.2/icons/check-circle-fill.svg" alt="删除用户" class="bi bi-check-circle-fill fs-6" name="btnDelete" aria-label="删除用户" onclick="location.href='@Url.Action("ManageUser", "ManageUsers", new { executeAction = "Delete", userId = item.UserID })'" />
同时在控制器的Get方法中添加删除逻辑,或给原Post方法新增[HttpGet]标记。
2. 修正控制器代码
修复Post方法的逻辑错误
[HttpPost] public IActionResult ManageUser(string executeAction, int userId) { string status = string.Empty; string statusMessage = string.Empty; if(executeAction == "Delete") { // 执行实际删除逻辑,例如:_userRepository.Delete(userId); status = "Success"; statusMessage = "用户删除成功"; } else { status = "Error"; statusMessage = "无效操作"; } // 修正参数传递方式,使用匿名对象传递路由参数 return RedirectToAction("ManageUser", "ManageUsers", new { Status = status, StatusMessage = statusMessage }); }
修正Get方法的参数大小写问题
[HttpGet] public IActionResult ManageUser(string Status, string? StatusMessage) { TempData["Message"] = ""; if(StatusMessage != null) { TempData["Message"] = StatusMessage; } // 加载模型的逻辑,例如:var model = _userRepository.GetAll(); return View(); // 替换为实际的model对象 }
3. 额外验证项
- 确认
@item.UserID有非0值,可在视图中直接输出@item.UserID验证数据是否正确。 - 确保Bootstrap图标的
src路径指向实际的SVG文件,而非CSS文件,否则图标无法正常显示。
内容的提问来源于stack exchange,提问作者John Butler
相关产品推荐
相关产品推荐

