Me pregunto cómo puede implementar varias acciones al enviar un formulario en asp.net mvc 3 RC.Cómo implementar mejor Guardar | Guardar y cerrar | Cancelar acciones de formulario en ASP.NET MVC 3 RC
Si estoy editando un usuario, por ejemplo, me gustaría tener una barra de acciones con los siguientes botones;
"Guardar" | "Guardar y cerrar" | "Cancelar"
Guardar - Envía el formulario y lo guarda, volviendo a la pantalla de edición. Podría implementarse fácilmente como un botón estándar de entrada/envío. Nada especial aquí.
código de controlador para este podría ser similar
public ActionResult Edit(UserViewModel model)
{
...
return RedirectToAction("Edit", model.Id");
}
Cancelar - Sólo le devuelve a la pantalla anterior. Estaba pensando en usar una etiqueta de anclaje para esto.
<a href="@Request.UrlReferrer" class="button">Cancel</a>
Pero estoy confundido sobre cómo implementar "Guardar y cerrar" cuando es necesario presentar los mismos datos del formulario. Me preguntaba si tendrías un param cerrado parecido a nullable.
public ActionResult Edit(UserViewModel model, bool? close)
{
...
return close.GetValueOrDefault(false) ? RedirectToAction("Index", model.Id" : RedirectToAction("Edit", model.Id");
}
Pero, ¿cómo presento este parámetro extra junto con el formulario en este caso?
Si es posible, me gustaría tener una sola acción de formulario para manejar el envío como en la maqueta anterior.
También me interesa si alguien más ha presentado un buen modelo de interacción del usuario en torno a esta idea.
Solución
Terminé usando la sugerencia de Omar a continuación, pero en lugar de pasar de una cadena que tomó en una enumeración así que no tengo que hacer controles de cadena en todos mis controladores.
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)
....
}
Porque quería un texto más amigable "Guardar y Cerrar" en el botón <input>
pero quería utilizar una enumeración que implementó un ModelBinder personalizado para formAction que hizo el análisis.
No usé una etiqueta <button>
porque la creación de temas ya estaba en su lugar para las etiquetas <input>
.
http://stackoverflow.com/questions/2423041/using-two- submit-buttons-inside-single-form/2426152 # 2426152 – takepara
Gracias Omar. Eso fue exactamente lo que quería. ¡Aclamaciones! –
Actualicé mi pregunta con una solución final basada en este enfoque. Muy similar, solo se limpió para usar una enumeración en lugar de cadenas. –