Multiple Submit Buttons in ASP.NET MVC can be handled in different ways. Here we will implement a clean attribute-based solution to handle multiple submit buttons in ASP.NET MVC Framework. Below is code snippet of an ASP.NET MVC attribute to handle multiple submit buttons in a Razor form.
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)] public class MultipleSubmitAttribute : ActionNameSelectorAttribute { public string Name { get; set; } public string Argument { get; set; } public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo) { bool isValidName = false; string 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; } }
Now, let’s make use of the MultipleSubmitAttribute in our actions in a controller that gets called to the appropriate submits. We have two MVC actions Send & Save. Each action will be called when the appropriate button is clicked by the user. Below is the code snippet of actions decorated with MultipleSubmitAttribute.
[HttpPost] [MultipleSubmit(Name = "action", Argument = "Send")] public ActionResult Send(Model model) { ... } [HttpPost] [MultipleSubmit (Name = "action", Argument = "Save")] public ActionResult Save(Model model) { ... }
Below is a snippet of razor view having a simple form with multiple submit buttons:
<form action="" method="post"> <input type="submit" value="Save" name="action:Save" /> <input type="submit" value="Send" name="action:Send" /> </form>