Pregunta

Nuestro sitio tiene múltiples '' asistentes '' donde se recopilan varios datos en varias páginas y no se pueden confirmar en la base de datos hasta el último paso.

¿Cuál es la mejor / correcta forma de hacer un asistente como este con ASP.Net MVC?

editar: mi jefe ahora dice "no javascript" - ¿Alguna idea sobre cómo sortear esa restricción?

¿Fue útil?

Solución

No creo que haya una mejor / correcta forma, pero la forma en que lo haría es ...

Cada asistente tiene su propia página. Cada paso tiene su propio div. Todos los pasos tienen la misma forma.

Los botones anterior / siguiente esencialmente ocultarían / ??mostrarían el div en cada paso del proceso. El botón de envío del último paso envía el formulario completo. Sería bastante trivial implementar esto usando jQuery, y sería fácil de mantener ya que todos los pasos del asistente están en una única ViewPage.

En el lado del controlador, tendría dos métodos de controlador, la versión HttpVerbs.Get que prepararía el formulario para su visualización y la versión HttpVerbs.Post que tomaría un Formulario de resultados y lo analizaría para obtener la información necesaria para enviar las respuestas del usuario al almacenamiento / otros procesos.


Wow, tu jefe apesta.

Esta respuesta funciona casi con gracia para aquellos ****** que tienen JavaScript deshabilitado (sí, ambos). Puede ajustarlo para ocultar los botones siguiente-anteriores a través de CSS y mostrarlos en su código javascript. De esta forma, las personas con javascript verán el asistente y las personas sin javascript verán el formulario completo (sin los botones siguiente / anterior).

La otra opción es crear una vista para cada paso en el asistente. Puede almacenar los resultados intermedios del formulario en la sesión. De esta manera, costaría mucho tiempo y esfuerzo implementarlo, lo que significa que probablemente podría exprimir un poco de tiempo extra de su jefe cuando demuestre, en aproximadamente veinte minutos de esfuerzo que dedica durante el almuerzo, lo fácil que es implementar la ruta de JavaScript.

Otros consejos

Si no puede usar JavaScript, haga que cada paso sea una vista, con un método en el controlador, y mantenga sus datos en sesión hasta que estén listos para enviarlos a la base de datos.

Puede crear sus botones Siguiente y Anterior utilizando el método ActionLink HtmlHelper.

Otra forma es guardar el objeto incompleto que está creando con el asistente en la base de datos y simplemente pasar la clave principal al siguiente paso del asistente. Sé que esto significa que necesita hacer que algunos de los campos de la base de datos sean anulables, pero tiene la ventaja adicional de que puede guardar la clave primaria en una cookie y permitir que el usuario regrese al asistente en algún momento posterior. Esta opción no requiere javascript o estado de sesión.

Haga que los diferentes paneles sean del lado del cliente ... todos en la misma forma ... y cuando se presiona el botón de envío final, puede publicar todos los valores al mismo tiempo.

Si no puede usar Javascript y no desea gastar recursos del servidor con variables de sesión, también puede serializar y deserializar los valores que se ingresan en los diferentes pasos, y pasarlos de un lado a otro utilizando un campo de entrada oculto. Un poco como ViewState en ASP.NET Webforms.

Creé un asistente de inicio de sesión y documenté las ideas detrás de él en mi blog si eso ayuda: Texto del enlace

Puede usar el componente simple MVCWizard.Wizard disponible en NuGet. El WizardController le permite crear un asistente usando una vista parcial. También existe el AutoWizardController que representa todo el asistente en una sola vista. Todos estos componentes funcionan con la sesión para almacenar el estado del modelo.

Hay un método muy simple, flexible y extensible en esta pregunta: Cómo simplificar mis diálogos modales entrelazados con estado en ASP.NET MVC

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top