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) { ... }

浙公网安备 33010602011771号