当前位置: 首页 > news >正文

ASP.NET MVC 中 如何将同一个form post到不同的action


问题描述


页面通常会有一个Search和一个Export,而这两个Action所需要的Form通常是一样的,因此就需要将同一个form动态的post到不同的action中。


方案一:实现MVC 框架中的Attribute ,完成Action的选择逻辑,在View中button的name中设置action的信息


添加一个attribute


[AttributeUsage(AttributeTargets.Method)]
    public class MultipleButtonAttribute : ActionNameSelectorAttribute
    {
        public string Name { get; set; }
        public string Argument { get; set; }


        public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
        {
            var isValidName = false;
            var keyValue = string.Format("{0}:{1}", Name, Argument);
            var value = controllerContext.Controller.ValueProvider.GetValue(keyValue);


            if (value != null)
            {
                controllerContext.Controller.ControllerContext.RouteData.Values[Name] = Argument;
                isValidName = true;
            }


            return isValidName;
        }
    }




说明: 这个Attribute继承自ActionNameSelectorAttribute,因此当MVC Framework选择Action时,就会调用IsValidName方法,在此处可通过判断前端传入的特殊参数来决定调用哪个action,进而完成了前端view与action的映射逻辑


然后在View中设置:


Search:


 <div class="col-xs-8">
            <button type="submit" name="action:SearchDeliveries" class="btn btn-success">Search</button>
        </div>




Export:


 <button type="submit" name="action:ExportToCsv" class="btn btn-default">Export</button>


Action中:


[MultipleButton(Name = "action", Argument = "ExportToCsv")]
        public ActionResult ExportToCsv(){
	//
}


[MultipleButton(Name = "action", Argument = "SearchDeliveries")]
        public ActionResult SearchDeliveries(FormCollection fc){
//
}




方案二是在javascript中完成的:


思路,在post时将表单的action重定向即可:




 $("#btnDateRangeSearch").click(function() {
                    var frm = $("#searchContainer").parent();
                    frm.attr("action", "@Url.Action("SearchDeliveries")");
                    frm.submit();
                });


                $("#btnExport").click(function () {
                    var frm = $("#searchContainer").parent();
                    frm.attr("action", "@Url.Action("ExportToCsv")");
                    frm.submit();
                });







相关文章:

  • 日本软件公司 管理者 改善 流程
  • C#委托和事件,ObServer模式实例代码
  • Mysql中文乱码的解决方法
  • 关于功能的设计
  • 清楚数据库中的全部数据并将ID归零
  • Java Web项目开发到底需要掌握哪些技术?
  • C# 判断时间段是否相交
  • lyo blog3D文章集锦
  • 使用c# Mongo Driver 完成嵌套查询
  • 过渡到SSAS之一:简单模型认识
  • 谈谈团队合作中的设计与优化
  • 页面元素的定位scrollintoview
  • C#将子线程附加在当前线程之后执行
  • 过渡到SSAS之二:服务的发布
  • MongoDb 中的PageFilter
  • ----------
  • Debian下无root权限使用Python访问Oracle
  • flask接收请求并推入栈
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • mac修复ab及siege安装
  • mysql innodb 索引使用指南
  • php面试题 汇集2
  • python_bomb----数据类型总结
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Shadow DOM 内部构造及如何构建独立组件
  • SpiderData 2019年2月16日 DApp数据排行榜
  • 安装python包到指定虚拟环境
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 构造函数(constructor)与原型链(prototype)关系
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 正则表达式
  • 正则表达式小结
  • kubernetes资源对象--ingress
  • ​2021半年盘点,不想你错过的重磅新书
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (十八)三元表达式和列表解析
  • (四)汇编语言——简单程序
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (一)Java算法:二分查找
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)插入排序
  • (转)JAVA中的堆栈
  • (转)memcache、redis缓存
  • .bashrc在哪里,alias妙用
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET导入Excel数据
  • .net和php怎么连接,php和apache之间如何连接