Handling Multiple submit button in asp.net mvc?

Is there some easy way to handle multiple submit buttons from the same form? Example:

<% Html.BeginForm("MyAction", "MyController", FormMethod.Post); %>

<input type="submit" value="Send" />

<input type="submit" value="Cancel" />

<% Html.EndForm(); %>

Any idea how to do this in ASP.NET Framework Beta? All examples I've googled for have single buttons in them.

Last updated:11/18/2014 6:06:57 AM

1 Answers

Royce Roy
Royce Roy

Here is a mostly clean attribute-based solution to the multiple submit button issue based heavily on the post and comments from Maartin Balliauw.

[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;
    }
}

razor:

<form action='' method='post'>
 <input type='submit' value='Save' name='action:Save' />
 <input type='submit' value='Cancel' name='action:Cancel' />
</form>

and controller:

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

Answer