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处理,相对比较 ...
随机推荐
- VS2012 打开cs文件报未找到与约束错误
一.问题发生 VS2012,更新补丁后的残忍--创建项目未找到与约束匹配的导出 创建项目时无法成功创建,而且提示:未找到与约束ontractNameMicrosoft.VisualStudio.Tex ...
- codeforces 499A.Inna and Pink Pony 解题报告
题目链接:http://codeforces.com/problemset/problem/499/A 题目意思:有两种按钮:1.如果当前观看的时间是 t,player 可以自动处理下一分钟,姑且理解 ...
- 复习sqldataread
public static DataTable ConvertDataReaderToDataTable(SqlDataReader dataReader) { ///定义DataTable Data ...
- 【leetcode】Reverse Integer(middle)☆
Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 总结:处理整数溢出 ...
- 【linux】学习3
鸟哥 书的第7章 从 /home/dtest1 跳入 /home/dtest2 目录: cd ../dtest2 注意 cd后有空格 ..后无空格 特殊目录: . 代表此层目录 .. ...
- 【python】入门学习(四)
函数: 定义函数 #area.py from math import pi def area(radius): """Return the area of a circl ...
- 【hadoop2.6.0】利用Hadoop的 Java API
Hadoop2.6.0的所有Java API都在 http://hadoop.apache.org/docs/r2.6.0/api/overview-summary.html 里. 下面实现一个利用J ...
- RAD Studio/Delphi 2010 3615下载+破解
RAD Studio/Delphi 2010 3615下载+破解 官方下载地址: http://altd.embarcadero.com/download/RADStudio2010/delphicb ...
- 让项目同时支持ARC和非ARC
ttp://code4app.com/snippets/one/禁止某几个文件用ARC模式编译/502344256803fa246d000000#s0 如果你的绝大部分代码需要ARC,那么就设置项目支 ...
- jvm分析
是什么 jps 查看所有的jvm进程,包括进程ID,进程启动的路径等等. jstack 观察jvm中当前所有线程的运行情况和线程当前状态. 系统崩溃了?如果java程序崩溃生成core文件,j ...