MVC页面上多个提交按钮提交到不同的Action

使用mvc扩展类,ActionNameAttribute方法如下:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
    public class MultiButtonAttribute : ActionNameSelectorAttribute
    {
        public string Name { get; set; }
        public string Argument { get; set; }
        public MultiButtonAttribute(string name)
        {
            this.Name = name;
        }
        public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
        {
            var key = ButtonKeyFrom(controllerContext);
            var keyIsValid = IsValid(key);

            if (keyIsValid)
            {
                UpdateValueProviderIn(controllerContext, ValueFrom(key));
            }

            return keyIsValid;
        }

        private string ButtonKeyFrom(ControllerContext controllerContext)
        {
            var keys = controllerContext.HttpContext.Request.Params.AllKeys;
            return keys.FirstOrDefault(KeyStartsWithButtonName);
        }

        private static bool IsValid(string key)
        {
            return key != null;
        }

        private static string ValueFrom(string key)
        {
            var parts = key.Split(":".ToCharArray());
            return parts.Length < 2 ? null : parts[1];
        }

        private void UpdateValueProviderIn(ControllerContext controllerContext, string value)
        {
            if (string.IsNullOrEmpty(Argument))
                return;
            controllerContext.RouteData.Values[this.Argument] = value;
        }


        private bool KeyStartsWithButtonName(string key)
        {
            return key.StartsWith(Name, StringComparison.InvariantCultureIgnoreCase);
        }


    }

Controller:

[HttpPost] 
[MultiButton(Name = "delete", Argument = "id")] 
public ActionResult Delete(string id) 
{ 
    return View(); 
} 

或者

        [HttpPost]
        [MultiButton("btnSearch")]
        public ActionResult Index(AttendanceList model)
        {
                return View(model);
        }

View:

<input type="submit" value="查询"  name="btnSearch" />
<input type="submit" value="删除" name="delete:id" />

 

posted @ 2015-10-21 18:36  wuyubing  阅读(1050)  评论(0编辑  收藏  举报