在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这类更贴合场景的名称) - 在对应的
EditAction中声明同名参数,然后编写对应的分支逻辑即可。
小提示
如果担心布尔值的类型转换问题,也可以把参数声明为string类型,然后在Action里手动转换判断,比如:
public ActionResult Create(YourModel model, string continueEditing) { bool shouldContinue = bool.Parse(continueEditing); // 后续逻辑同上 }
内容的提问来源于stack exchange,提问作者Afsaneh Daneshi
相关产品推荐
相关产品推荐

