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

ManageUser回发方法中UserId未传递始终为0,该如何修正?

问题分析与解决方案

核心问题

  1. 视图中用location.href触发的是GET请求,但控制器处理删除逻辑的是[HttpPost]标记的方法,请求类型不匹配,导致参数无法正确绑定到Post方法。
  2. 控制器Post方法存在变量错误:string status = action;里的action未定义,且RedirectToAction的参数传递方式错误。
  3. 图片按钮的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:20:51