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();
                });

时间: 2024-12-11 16:49:14

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

ASP.NET MVC中如何以ajax的方式在View和Action中传递数据

前言:写这篇随笔的时候,在url上漏写了斜线,找了好久错误,整个人都很不好.#我是猪系列 背景:之前介绍过一篇如何构建ASP.NET MVC4&JQuery&AJax&JSon示例,这一篇单独讲解如何在View和Action间传递并处理数据. 1,前台HTML代码: 1 <div> 2 <button type="button" id="btn">从视图向控制器中传递数据</button> 3 <p

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

有时候会遇到这样的情况:在一个表单上须要多个button来完毕不同的功能,比方一个简单的审批功能. 假设是用webform那不须要讨论,但asp.net mvc中一个表单仅仅能提交到一个Action处理,相对照较麻烦点. 方法一:使用client脚本 比方我们在View中这样写: <inputtype="submit"value="审核通过"onclick='this.form.action="<%=Url.Action("Actio

asp.net MVC中控制器获取表单form提交的数据之实体类数据

第一次写记录文章,难免有不足之处:欢迎指出. 1.新建一个mvc项目如: 2.新建一个Test.cs 注意get,set方法不能简写 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 using System; using System.Collections.Generic; using System.Linq; usi

Asp.net mvc 中处理同一个session的并行请求的问题

首先来一个小的asp.net mvc 4的sample,代码如下: HomeController: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.SessionState; namespace MvcApplication2.Controllers { public class HomeContr

关于asp.net MVC 中的TryUpdateModel方法

有比较才会有收货,有需求才会发现更多. 在传统的WebFormk开发工作中,我们常常会存在如下的代码块 //保存 protected void btnSubmit_Click(object sender, EventArgs e) { try { BLL.MoneyBll cun = new BLL.MoneyBll(); Model.Money m1 = new Model.Money(); m1.Commany = int.Parse(this.Commany.Text); m1.Count

Asp.Net MVC中使用ACE模板之Jqgrid

第一次看到ACE模板,有种感动,有种相见恨晚的感觉,于是迅速来研究.它本身是基于bootstrap和jqueryui,但更nice,整合之后为后台开发节省了大量时间. 发现虽然不是完美,整体效果还是不错,特此分享给园友.这一节先讲其中的Jqgrid.按照国际惯例,先上两张图. 集成了button,form,treeview以及日历,时间轴.chart等控件,非常丰富.下面是Jqgrid在MVC中的使用. jqgrid的加载,排序,查找都是基于后台方法,不是在内存中完成,但也有一些小坑.下面一一道

NHibernate中Session与ASP.NET MVC中Action的综合使用

NHibernate的基本特征是完成面向对象的程序设计语言到关系数据库的映射,在NHibernate中使用持久化对象PO(Persistent Object)完成持久化操作,对PO的操作必须在Session管理下才能同步到数据库, 但是这里的Session并非指HttpSession,可以理解为基于ADO.NET的Connnection,Session是NHibernate运作的中心,对象的生命周期.事务的管理.数据库的存取都与Session息息相关,首先,我们需要知道, SessionFact

NPOI以及在ASP.NET MVC中的使用

NPOI以及在ASP.NET MVC中的使用 1.前言 相信大家在工作中经常要遇到一些导入导出Execl操作.学习贵在分享,分享使人快乐,园子里的前辈已经有很多好的文章,鄙人也是能力有限,在这里把这些好的文章总结,方便以后再工作中使用. NPOI:是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作. 它不使用Off

警惕ASP.NET MVC中的ValidateInputAttribute

最近在做一个ASP.NET MVC项目的时候发现,有一个Controller的Action死活都没法接收到从客户端提交过来的Html表单请求和数据,后来才发现是因为默认情况下ASP.NET MVC在执行Controller的代码前,会对客户端提交到服务器的数据做安全性验证,如果ASP.NET检测到客户端提交的数据中有危险数据(危险数据一般是一些关键字和关键符号),那么就会中断当前客户端提交的请求并且引发一个异常,那么客户端提交的数据自然就不会进入到Controller和Action了.主要原因是