MVC3实现多个按钮提交
有时我们需要在同一个Form表单中进行多个按钮的提交,来完成不同的功能。因为MVC中一个表单默认只能提交到一个Action处理,相对比较麻烦。
1、使用客户端脚本
我们可以view中加上如下代码:

<input type="submit" value="SubmitToAbout1" onclick='this.form.action="@Url.Action("About1")" '/>
<br />
<input type="submit" value="SubmitToAbout2" onclick='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,控制器来执行其相应的方法了。
MVC3实现多个按钮提交的更多相关文章
- 转:MVC单表多按钮提交
有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...
- ASP.NET MVC中实现多个按钮提交的几种方法
有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...
- ASP.NET MVC实现多个按钮提交事件
有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...
- javaWeb中一个按钮提交两个表单
一个按钮提交两个表单,有时候会用到,一般会很容易想到使用 onclick="document.form1.submit();document.form2.submit();" 的方 ...
- MVC中实现多按钮提交(转)
有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...
- php 模拟 asp.net webFrom 按钮提交事件
由于公司需要php方面的项目开发,php刚刚入门,在写按钮提交过程中,asp.net里的按钮事件更好些.先看下面的代码, <? require_once '../inc/EventHelper. ...
- [转]ASP.NET MVC中实现多个按钮提交的几种方法
本文转自:http://www.cnblogs.com/wuchang/archive/2010/01/29/1658916.html 有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能, ...
- jQuery实现button按钮提交表单
在JSP页面中,通常使用button按钮提交表单数据,使用jQuery实现代码如下: <span style="font-family:Comic Sans MS;font-size: ...
- 【MVC】ASP.NET MVC中实现多个按钮提交的几种方法
有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...
随机推荐
- GNOME启动时激活NumLock(小键盘数字锁定)
首先下载numlockx官方源提供的安装包,解压后进入目录运行终端,切换到root账户执行以下命令: python ./setup.py 然后依次点击GNOME菜单项上的“系统->首选项-> ...
- IOS开发中与设计沟通之字体大小转换
px:相对长度单位.像素(Pixel).pt:绝对长度单位.点(Point).1in = 2.54cm = 25.4 mm = 72pt = 6pc 具体换算是: Points Pixels Ems ...
- 使用a标签删除进行提示
一句话搞定: <a href="Login.aspx" target="mainFrame" class="STYLE4" oncli ...
- ios layer 动画-(transform.rotation篇)
x轴旋转: CABasicAnimation *theAnimation; theAnimation=[CABasicAnimation animationWithKeyPath:@"tra ...
- 最长公共上升子序列(codevs 2185)
题目描述 Description 熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目.小沐沐先让奶牛研究了最长上升子序列,再让他们研究了最长公共子序列,现在又让他们要研究最长公共上升子序列了. 小沐沐说,对 ...
- noip2016复习
明天的复习任务 矩阵乘法 优先队列(老忘记怎么打) 二分图 K短路 单调队列(还是不太明白各种顺序) 扩展欧几里得 费马小定理求素数 哎呀,列了这么多,任重而道远啊-- 今夕是何夕,晚风过花庭-- 故 ...
- python基础——单元测试
python基础——单元测试 如果你听说过“测试驱动开发”(TDD:Test-Driven Development),单元测试就不陌生. 单元测试是用来对一个模块.一个函数或者一个类来进行正确性检验的 ...
- Android中通过反射获取资源Id
package com.cp.utils; import android.content.Context; public class CPResourceUtil { public static in ...
- MyBatis mapper文件中的变量引用方式#{}与${}的差别
MyBatis mapper文件中的变量引用方式#{}与${}的差别 #{},和 ${}传参的区别如下:使用#传入参数是,sql语句解析是会加上"",当成字符串来解析,这样相比于$ ...
- #Mac技巧#如何在Mac系统上新建TXT文档,以及打开txt文稿的乱码问题如何解决
使用mac的朋友可能都有这样的疑问,mac系统下强大的文本编辑器居然不能保存常用的TXT格式? 又或者打开同事在windows上保存的TXT文件会出现如下情况: 最近Hans也被这些问题困扰着,于是便 ...