Vários botões de envio

Ontem, precisei fazer um formulário com dois botões de envio. Cada botão deve postar em uma ação diferente. Para resolver este problema, implementei um actionSelector assim:

public class HttpParameterSelector : ActionNameSelectorAttribute 
{
public string Name { get; set; }

public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
{
var parameterValue = controllerContext.HttpContext.Request[Name];

return !string.IsNullOrWhiteSpace(parameterValue) &&
parameterValue
.Equals(methodInfo.Name, StringComparison.InvariantCultureIgnoreCase);
}
}

Funciona com base nos parâmetros enviados em querystring ou formulário.

Esta é a minha forma de navalha:

@using (Html.BeginForm())
{
<input type="submit" name="action" value="Disapprove" />
<input type="submit" name="action" value="Approve" />
}

No meu controlador, estou usando meu seletor de ação assim:

[HttpParameterSelector(Name = "action")]
public ActionResult Approve()
{ }
[HttpParameterSelector(Name = "action")]
public ActionResult Disapprove()
{ }

Nesse caso, meu seletor de ação escolhe com base no parâmetro “ação”.