有时我们需要在同一个Form表单中进行多个按钮的提交,来完成不同的功能。因为MVC中一个表单默认只能提交到一个Action处理,相对比较麻烦。

1、使用客户端脚本

我们可以view中加上如下代码:

<input type="submit" value="SubmitToAbout1" οnclick='this.form.action="@Url.Action("About1")" '/> <br /> <input type="submit" value="SubmitToAbout2" οnclick='this.form.action="@Url.Action("About2")" '/>

用来指示不同的按钮点击后跳转到不同的Action。Action方法代码如下:

public string About1(FormCollection collection){return collection["Title"]; } public string About2(FormCollection collection) { return collection["Title"]; }

这样就实现了点击不同的按钮跳转到不同的方法中。

2、在Action中判断按钮的value值

在view中,不同的input标签,定义相同的name,如下:

<input type="submit" value="SubmitToAbout1" name="action"/> <input type="submit" value="SubmitToAbout2" name="action"/>

然后在Action方法中,获取表单传过来的数据,获取name为action的value值,再根据value值去进行判断。

[HttpPost]public ActionResult About(FormCollection collection){string action=collection["action"]; if (action == "SubmitToAbout1") { ViewBag.action = "SubmitToAbout1"; } else if (action == "SubmitToAbout2") { ViewBag.action = "SubmitToAbout2"; } return View(); }

此种方法我们可以做出改进,新建一个MultiButtonAttribute类,该类继承ActionNameSelectorAttribute类,该类代码如下:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]public class MultiButtonAttribute : ActionNameSelectorAttribute { public string MatchFormKey { get; set; } public string MatchFormValue { get; set; } public override bool IsValidName(ControllerContext controllerContext, string actionName, System.Reflection.MethodInfo methodInfo) { bool state= controllerContext.HttpContext.Request[MatchFormKey] != null && controllerContext.HttpContext.Request[MatchFormKey] == MatchFormValue; return state; } }

其中view中代码不变,还是

<input type="submit" value="SubmitToAbout1" name="action"/> <input type="submit" value="SubmitToAbout2" name="action"/>

在控制器的Action中调用:

[HttpPost][MultiButton(MatchFormKey = "action", MatchFormValue = "SubmitToAbout1")] public string About1(FormCollection collection) { return "SubmitToAbout1 clicked"; } [HttpPost] [MultiButton(MatchFormKey = "action", MatchFormValue = "SubmitToAbout2")] public string About2(FormCollection collection) { return "SubmitToAbout2 clicked"; }

这样,点击submit按钮时,MultiButton会根据按钮的name和value值跳转到相应的执行方法。

3、判断按钮的name值

判断按钮的value值有很多不确定的因素,比如按钮的value值可能会更加客户的个人爱好而进行改动,或者按钮需要改成多语言版本的,这时我们 根据按钮的value值来选择不同的控制器的Action时就显得极其不灵活,这时我们希望通过按钮的name值来选择其相应的Action方法。同样还 是自定义一个MultiButtonAttribute类,该类继承ActionNameSelectorAttribute类,该类代码为:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]public class MultiButtonAttribute : ActionNameSelectorAttribute { public string MatchFormValue { get; set; } public override bool IsValidName(ControllerContext controllerContext, string actionName, System.Reflection.MethodInfo methodInfo) { bool state = !string.IsNullOrEmpty(MatchFormValue) && controllerContext.HttpContext.Request.Form.AllKeys.Contains(this.MatchFormValue); return state; } }

视图上按钮代码为:

<input type="submit" value="SubmitToAbout1" name="about1"/> <input type="submit" value="SubmitToAbout2" name="about2"/>

控制器Action代码:

[HttpPost][MultiButton(MatchFormValue = "about1")]public string About1(FormCollection collection) { return "SubmitToAbout1 clicked"; } [HttpPost] [MultiButton(MatchFormValue = "about2")] public string About2(FormCollection collection) { return "SubmitToAbout2 clicked"; }

这样就可以根据不同的按钮的name,控制器来执行其相应的方法了。

转载于:https://www.cnblogs.com/lsgsanxiao/p/5110521.html

MVC3实现多个按钮提交相关推荐

  1. MVC中实现多按钮提交(转)

    有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...

  2. 如何防止按钮提交表单

    在下一页中,使用Firefox,"删除"按钮提交表单,但"添加"按钮不提交. 如何防止"删除"按钮提交表单? <html> &l ...

  3. ASP.NET MVC中实现多个按钮提交的几种方法

    有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...

  4. 按钮提交在url后添加字段_在输入字段上定向单击“清除”按钮(X)

    按钮提交在url后添加字段 jQuery makes it easy to get your project up and running. Though it's fallen out of fav ...

  5. html5重置按钮,25-普通按钮-提交按钮-重置按钮

    普通按用来控制其定义的脚本的处理工作. type="button" name="" value="" οnclick="" ...

  6. Button按钮提交form表单

    Button按钮提交form表单 function userlogin(){document.getElementById("userlogin").submit();} < ...

  7. 一个jsp页面中多个提交按钮提交不同的页面

    <span style="font-size:24px;">登录注册页面:</span> form action="LoginServlet&qu ...

  8. html:(20):使用下拉框进行多选和使用提交按钮提交

    使用下拉列表框进行多选 下拉列表也可以进行多选操作,在<select>标签中设置multiple="multiple"属性,就可以实现多选功能,在 windows 操作 ...

  9. vue点击按钮上传图片_关于javascript:Vue-点击按钮提交表单

    我有一个组件,用户可以在其中上传图像,我还想添加一个删除图像的功能. 我添加了一个按钮,该按钮可删除当前图像,但是它的问题在于表单也正在提交,因此我想避免这种情况. 我只需要删除当前图像(如果存在). ...

最新文章

  1. AWS开源Firecracker,一种运行多租户容器服务的新虚拟化技术
  2. 读取字符串字符时出错_JVM | 运行时常量池和字符串常量池及intern()
  3. oracle: 安装客户端
  4. PAT乙级题目答案汇总PAT (Basic Level) Practice (中文)
  5. 错误ORA-04091: table is mutating, trigger/function may not see it的原因以及解决办法
  6. r语言做断轴_R语言用nls做非线性回归以及函数模型的参数估计
  7. VSCode如何关闭右侧预览功能 - 截图示下
  8. VS编译时自动引用Debug|Release版本的dll
  9. linkedin 分享_如何将WordPress帖子自动发布到LinkedIn
  10. Establishing a tunnel via proxy server failed;
  11. 社区发现算法 | Louvain 算法 中的分辨率参数
  12. PCB贴片元器件手工焊接技巧及要点
  13. 4种Word文档解除密码保护的方法
  14. 新浪搜狐网易等那些老牌互联网公司现在都怎样了?
  15. adobe bridge cs6怎么卸载_安装adobe ps cs6时,一起的Adobe Bridge CS6 (64 Bit)是什么东西?装了需不需要卸载?...
  16. premiere cs6导出视频格式
  17. TCP/IP中的链路层
  18. 华为的鸿蒙os,鸿蒙OS明天正式发布,十大特性,能拯救暴跌80%的华为手机吗?...
  19. parquet和textfile存储对比
  20. AirtestIDE1.2.13的安卓手机设置自动初始化功能

热门文章

  1. JBuilder安装JDBC drive的方法略解
  2. ASP.NET2.0_缓存
  3. CVPR2021 | MIMO-VRN 用于视频缩放任务的联合训练策略
  4. 下血本!Facebook AI 20万美金举办“图像匹配”大赛
  5. DeepLesion 更新下载
  6. 博士申请 | 北京大学智能计算与感知实验室招收博士、硕士、本科实习生
  7. ResNet被全面超越了,是Transformer干的:轻量版优于MobileNet
  8. 深度学习与TensorFlow:VGG论文复现
  9. 源码安装mysql 5.1_Linux环境下源码编译安装MySQL5.1
  10. centos 安装mysql_Centos 下mysql数据库完整安装过程