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

在MVC中如何使用不同提交按钮向Action传递不同参数?

在MVC中通过不同提交按钮向Action传递参数的方案

嘿,我来帮你搞定这个问题!其实你当前的前端写法已经找对方向啦——两个提交按钮共用同一个name属性(continueEditing),仅value不同,这正是MVC里区分提交意图的经典方式之一。下面给你详细拆解实现逻辑:

1. 前端写法的合理性

你现在的按钮代码完全没问题:

<button type="submit" class="btn btn-success btn-sm" name="continueEditing" value="false">
  <i class="fa fa-save"></i> @GlobalRes.Save
</button>
<button type="submit" class="btn btn-success btn-sm" name="continueEditing" value="true">
  <i class="fa fa-save"></i> @GlobalRes.SaveAndContinue
</button>

当用户点击其中一个按钮时,浏览器会自动把该按钮的name和对应value作为表单数据的一部分提交到后台,这是HTML表单的原生行为,MVC框架可以直接识别这种参数传递方式。

2. 后端Action的处理逻辑

在你的Create Action方法中,只需要声明一个与按钮name同名的参数(这里是bool continueEditing),就能直接获取到提交按钮传递的value,然后根据值执行不同逻辑:

[HttpPost]
public ActionResult Create(YourModel model, bool continueEditing)
{
    // 先验证模型合法性
    if (ModelState.IsValid)
    {
        // 执行创建数据的核心逻辑(比如保存到数据库)
        db.YourEntity.Add(model);
        db.SaveChanges();

        // 根据continueEditing的值分支处理
        if (continueEditing)
        {
            // 保存并继续编辑:跳转到当前新增数据的编辑页面
            return RedirectToAction("Edit", new { id = model.Id });
        }
        else
        {
            // 仅保存:跳转到数据列表页面
            return RedirectToAction("Index");
        }
    }

    // 如果模型验证失败,返回表单页面并保留用户输入
    return View(model);
}

3. 扩展:其他表单的复用逻辑

对于你提到的第二个表单(比如Edit表单),可以复用同样的思路:

  • 给该表单的两个提交按钮设置相同的name(比如还是continueEditing,或者换成returnToList这类更贴合场景的名称)
  • 在对应的Edit Action中声明同名参数,然后编写对应的分支逻辑即可。

小提示

如果担心布尔值的类型转换问题,也可以把参数声明为string类型,然后在Action里手动转换判断,比如:

public ActionResult Create(YourModel model, string continueEditing)
{
    bool shouldContinue = bool.Parse(continueEditing);
    // 后续逻辑同上
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:10:34