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

ASP.NET Core如何实现同页面两个按钮提交同一模型到不同后端方法

实现方案

完全可以实现同页面两个提交按钮传递同一个Model到不同后端方法,下面是最推荐的无JS实现方案:

问题根因

你当前的删除按钮被包裹在<a>标签中,触发的是GET请求,只会携带URL中显式拼接的参数,不会提交当前页面的表单数据,因此后端拿到的Model为空。

具体实现步骤

1. 修改前端代码

将两个提交按钮都放在同一个form标签内部,给删除按钮添加formaction属性指定提交到DeleteUser接口即可,浏览器会自动把当前表单的所有数据提交到对应地址:

@* 你的表单根标签,所有输入控件都要放在这个form内部 *@
@using (Html.BeginForm("Edit", "Account", FormMethod.Post))
{
    @* 原有页面的所有表单输入、展示内容都保留在这里 *@

    @if ((currentUser.IsInRole("SuperAdmin")))
    {
        @* 删除按钮:指定提交路径为DeleteUser *@
        <input type="submit" class="btn-glow primary" value="@_stringLocalizer["DELETE"]" 
               formaction="@Url.Action("DeleteUser", "Account")" />
    }

    @* 原有编辑提交按钮,默认提交到form指定的Edit接口 *@
    <input type="submit" class="btn-glow primary" value="@_stringLocalizer["AccountEditViewSubmitButtonDisplayName"]" id="submit" />
}

2. 修正后端代码

给DeleteUser方法添加[HttpPost]特性,接收表单POST提交的数据:

[Authorize(Roles = "SuperAdmin")]
[HttpPost] // 必须添加,匹配表单的POST提交方式
public async Task<IActionResult> DeleteUser(frontEndModel model)
{
    // 这里的model就能正常获取到前端表单的所有绑定数据
    if (model?.user != null)
    {
        // 你的删除业务逻辑
        _context.Users.Remove(model.user);
        await _context.SaveChangesAsync();
    }
    return RedirectToAction("UserList"); // 操作完成后跳转对应页面
}

[Authorize(Roles = "Admin,GroupAdmin,SuperAdmin")]
[HttpPost]
public async Task<IActionResult> Edit(frontEndModel model)
{
    // 原有编辑逻辑完全不变
}

注意事项

  • 确保你需要传递的Model所有字段,在form内部都有对应的输入控件(可见输入框或者<input type="hidden" />隐藏控件都可以),否则ASP.NET Core的模型绑定会自动忽略对应字段
  • 如果需要删除前二次确认,只需要给删除按钮添加onclick="return confirm('确认删除该用户?')"即可,不影响表单数据提交

内容的提问来源于stack exchange,提问作者AverageGuyIsaac

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 04:06:05