asp.net mvc 同一个表单多个提交按钮

 

View:

    <div>
        @using (Html.BeginForm("SetCache","Home"))
        {
            <div>
                 设置值:<input type="text" name="sValue" />
                 缓存测试 <input type="submit" value="设置" name="SetMemCache" />
                  <input type="submit" value="退出"  name="LogOut"/>
            </div>
            
          
        }    
    </div>

 

Controller:

        [HttpPost]
        [MultiButton("SetMemCache")]
       public void SetCache(string sValue)
        {

              //todo something
        }

        [HttpPost]
        [MultiButton("LogOut")]
        public void SetCache()
        {
         
            Session.Clear();
            FormsAuthentication.SignOut();
           
        }


Filter

    public class MultiButtonAttribute : ActionNameSelectorAttribute
    {
        public string Name { get; set; }
        public MultiButtonAttribute(string name)
        {
            this.Name = name;
        }
        public override bool IsValidName(ControllerContext controllerContext, string actionName, System.Reflection.MethodInfo methodInfo)
        {
            if (string.IsNullOrEmpty(this.Name))
            {
                return false;
            }
            return controllerContext.HttpContext.Request.Form.AllKeys.Contains(this.Name);
        }
    }

 

 

方法二(对方法一优化):

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
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;
    }
}
<form action="" method="post">
 <input type="submit" value="Save" name="action:Save" />
 <input type="submit" value="Cancel" name="action:Cancel" />
</form>
[HttpPost]
[MultipleButton(Name = "action", Argument = "Save")]
public ActionResult Save(MessageModel mm) { ... }

[HttpPost]
[MultipleButton(Name = "action", Argument = "Cancel")]
public ActionResult Cancel(MessageModel mm) { ... }

 

posted @ 2013-11-20 14:45  anytech  阅读(650)  评论(0)    收藏  举报