首页 > Web开发 > 详细

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

时间:2015-02-09 23:04:35      阅读:643      评论:0      收藏:0      [点我收藏+]

问题描述


页面通常会有一个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();
                });







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

原文:http://blog.csdn.net/lan_liang/article/details/43678795

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!