2009-12-28 8 views
2

J'ai un seul formulaire avec plusieurs boutons de soumission qui ont la même valeur. Exemple: "Procéder".ASP.Net MVC - Boutons Submit avec la même valeur

Maintenant, dans la méthode post-contrôleur d'ASP.Net MVC, comment savoir quel bouton est enfoncé?

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult DepartmentDetails(string submitButton) 

La valeur de submitButton sera toujours "Procéder". Comment savoir quel bouton est enfoncé.

J'ai donné des identifiants séparés pour chaque bouton.

Merci.

+0

Vous avez deux boutons avec la même valeur mais vous voulez qu'ils fassent des choses différentes? Cela ne va-t-il pas dérouter l'utilisateur? Quel est le problème de donner aux boutons différentes valeurs? – DOK

+2

Les 'ID' n'ont pas d'importance, le' Name' est ce qui compte. Est-ce une valeur différente? Il semble qu'il pourrait y avoir une approche plus simple de ce que vous cherchez. Fournir plus de détails pourrait aider. –

+0

s'il vous plaît poster votre code HTML. –

Répondre

4

Essayez ceci:

<% using (Html.BeginForm()) 
    { %> 
    <input type="submit" value="Submit" name="Submit1Button" /> 
    <input type="submit" value="Submit" name="Submit2Button" /> 
<%} %> 

public class HomeController : Controller 
{ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Index(FormCollection values) 
    { 
     string buttonName = values.AllKeys.Where((n) => n.EndsWith("Button")).SingleOrDefault(); 
     return View(); 
    } 

} 
+0

Merci. Ça marche. –

2

Ne serait-il pas plus logique de briser votre page en deux formes différentes?

Vous pouvez ensuite utiliser les arguments de votre méthode Html.BeginForm HtmlHelper pour spécifier différentes méthodes d'action Contrôleur (s) pour chaque formulaire.

0

Je me rends compte que cette question est ancienne, mais j'ai juste couru dedans tellement pensé que je répondrais!

Voici ce que nous utilisons:

/// <summary> 
/// Attribute for Controller methods to decide whether a particular button 
/// was clicked and hence whether the method can handle the action. 
/// </summary> 
public class IfButtonClickedAttribute : ActionMethodSelectorAttribute 
{ 
    private readonly IEnumerable<string> _buttonNames; 

    public IfButtonClickedAttribute(params string[] buttonNames) 
    { 
     _buttonNames = buttonNames; 
    } 

    public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo) 
    { 
     if (controllerContext.HttpContext.Request.HttpMethod != "POST") 
      return false; 

     foreach (string buttonName in _buttonNames) 
     { 
      //this first test is for buttons or inputs that have the actual name specified 
      if (controllerContext.HttpContext.Request.Form[buttonName] != null) 
       return true; 
     } 

     return false; 
    } 
} 

ensuite sur vos actions vous allez:

[ActionName("SaveItem"), IfButtonClicked("SaveAsDraft")] 
public ActionResult SaveAsDraft(){ ... } 

[ActionName("SaveItem"), IfButtonClicked("SaveAsPublished")] 
public ActionResult SaveAsPublished(){ ... } 
Questions connexes