MVC3实现多个按钮提交
2024-10-18 18:16:13
有时我们需要在同一个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,控制器来执行其相应的方法了。
最新文章
- SQL创建流水号
- MIL 多示例学习 特征选择
- js 运算符优先级
- iOS学习笔记10-UIView动画
- php 数组转json格式
- Jquery 实现json复杂查询等操作(jsonDB)
- TreeSet,Comparator
- asp.net C# 时间格式大全
- Drainage Ditches - poj 1273(网络流模板)
- 使用 VB.NET 开发多线程
- 【Android基础】listview控件的使用(3)------Map与SimpleAdapter组成的多显示条目的Listview
- gc学习(转)
- 第一次使用cnblogs
- Print Article hdu 3507 一道斜率优化DP 表示是基础题,但对我来说很难
- python --- hashlib模块使用详解
- “字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛 1010 Count
- Powershell中显示隐藏文件
- 题解 P1034 【矩形覆盖】
- 详解JavaScript中的Event Loop(事件循环)机制
- Zookeeper笔记之四字命令
热门文章
- 2101 Problem A Snake Filled
- Asp.Net之自定义表达式构造器(ExpressionBuilder)
- IOS - UITableViewCell的选中时的颜色及tableViewCell的selecte与deselecte
- noip2016复习
- Myeclipse for Mac快捷键
- ios框架
- C#回顾 &ndash; 4.IEnumerable 集合
- 15.命令模式(Command Pattern)
- HTML+CSS页面滚动效果处理
- JetBrains发布了IntelliJ IDEA 2016.1