Je me demande comment vous pouvez procéder à l'implémentation de plusieurs actions lors de la soumission d'un formulaire dans asp.net mvc 3 RC.Comment optimiser l'implémentation Enregistrer | Enregistrer et fermer | Annuler les actions de formulaire dans ASP.NET MVC 3 RC
Si j'édite un utilisateur, par exemple, j'aimerais avoir une barre d'action avec les boutons suivants;
"Enregistrer" | "Enregistrer et fermer" | "Annuler"
Enregistrer - Envoie le formulaire et enregistre, pour revenir à l'écran d'édition. Peut être facilement implémenté en tant que bouton d'entrée/de soumission standard. Rien de spécial ici.
code du contrôleur pour cela pourrait ressembler
public ActionResult Edit(UserViewModel model)
{
...
return RedirectToAction("Edit", model.Id");
}
Annuler - Il suffit de vous revenir à l'écran précédent. Je pensais à utiliser une balise d'ancrage pour cela.
<a href="@Request.UrlReferrer" class="button">Cancel</a>
Mais je suis perplexe sur la façon de mettre en œuvre « Enregistrer et fermer » lorsque vous devez présenter les mêmes données de formulaire. Je me demandais d'avoir un paramètre proche nullable peut-être? Mais comment soumettre ce paramètre supplémentaire avec le formulaire dans ce cas?
Si possible, j'aimerais avoir une seule action de formulaire pour gérer le soumettre comme dans la maquette ci-dessus.
Je suis également intéressé si quelqu'un d'autre a trouvé un bon modèle d'interaction utilisateur autour de cette idée.
Solution
Je fini par utiliser la suggestion d'Omar ci-dessous, mais au lieu de passer dans une chaîne que je pris dans un ENUM, donc je ne dois pas faire des vérifications de chaîne dans tous mes contrôleurs.
public ActionResult Edit(UserViewModel model, FormAction actionType)
{
// pre-check
if (actionType == FormAction.Cancel)
// just return user to previous view and don't save.
// Save code
if (actionType == FormAction.Save)
return ...
else if (actionType == FormAction.SaveAndClose)
....
}
Parce que je voulais un texte plus favorable « Enregistrer et fermer » sur le bouton <input>
mais je voulais utiliser un ENUM je mis en œuvre un ModelBinder personnalisé pour FormAction qui a fait l'analyse syntaxique.
Je n'ai pas utilisé de balise <button>
parce que le thème était déjà en place pour les balises <input>
.
http://stackoverflow.com/questions/2423041/using-two- soumettre-boutons-à l'intérieur-unique-forme/2426152 # 2426152 – takepara
Merci Omar. C'était exactement ce que je voulais. À votre santé! –
Mis à jour ma question avec la solution finale basée sur cette approche. Assez similaire, juste nettoyé pour utiliser une énumération au lieu de chaînes. –