2009-04-17 47 views
21

Me gustaría construir un objeto en diferentes pasos en una aplicación asp.net mvc, siendo cada paso una página diferente. El tipo de cosas que almacenarías en Session en una aplicación rápida Web.Forms.Asp.Net MVC y sesión

Al leer sobre esto, la sesión no me parece algo muy asp.net MVC'ish. Sin embargo, no puedo pensar en otras alternativas a esta situación ya que TempData y ViewData tampoco parecen encajar, así que tal vez estoy equivocado.

Por supuesto que podría poner los 4 pasos en una página y mostrar/ocultar, pero ese no es mi punto con la pregunta. Me gustaría escuchar su opinión sobre la sesión en MVC, si es un buen enfoque para este tipo de problema de pasos múltiples o si tiende a hacerlo de otras maneras.

Esto es muy parecido a la pregunta Session variables in ASP.NET MVC, excepto que no estoy buscando cómo acceder a la sesión, pero si es la mejor manera de resolver ese problema o hay algo mejor me falta en Asp.Net MVC .

Gracias de antemano

Respuesta

20

No hay nada que no sea MVC sobre Session, es una parte vital de la web y la mayoría de los sitios lo usan de alguna manera. Realmente tienes dos opciones principales. Guarde el objeto en la base de datos entre páginas (lo que significa que guarda un objeto incompleto) o póngalo en sesión. Ambos tienen ventajas y desventajas.

En sesión no tiene que guardar un objeto parcial en la base de datos, pero si el usuario se va o la sesión expira, pierde toda esa información. También puede conducir a una mayor huella de memoria por usuario y cuando se escala, ocasiona algunos otros problemas. (todo lo cual se puede resolver usando la sesión adhesiva en un equilibrador de carga o en la tienda de sesión central).

La forma de la base de datos es mejor en muchos aspectos, pero generalmente no desea guardar objetos incompletos en la base de datos, un compromiso es crear otra tabla y guardar el objeto serializado en esa tabla. No está pasando por sus tablas reales y por lo tanto no tiene que comprometer las limitaciones de su base de datos. (También puede almacenar datos de sesión en la base de datos que básicamente está haciendo lo mismo)

Al final es una llamada de juicio entre las dos formas, he utilizado tanto en los últimos años.

+0

No estoy en desacuerdo con usted, pero tenga en cuenta que la sesión fija o el estado de la sesión central son malas noticias para la escalabilidad. Todavía es posible escalar, por supuesto, pero hace la vida difícil. Si se puede evitar el estado de la sesión, la historia de la escalabilidad es mucho más agradable. ¿Tal vez por eso el OP es cauteloso? –

+4

¿Cómo se define duro? He escalado una cantidad de sistemas usando este método y no tuve problemas. Es muy difícil evitar la sesión por completo, especialmente una vez que ingresas a usuarios que inician sesión, etc. –

1

¿Usted ha intentado <%= Html.HiddenField(...) %>?

+0

¿Quiere decir html helper para ""? Con eso solo pude almacenar valores simples, necesito almacenar y poblar un objeto complejo – antonioh

+0

http://stackoverflow.com/questions/669492/asp-net-mvc-is-herehere-a-way-to-simulate-a -viewstate/669495 # 669495 –

+0

Gracias, pero eso no es realmente lo que estaba buscando. Estoy buscando buenas prácticas estándar. Aunque es una buena idea. – antonioh

2

Puede pasarlo entre Vistas con TempData ... pero tiene que mantenerlo pasando a través de vistas posteriores. Está destinado a ser consumido por una solicitud posterior, pero eso no quiere decir que no se pudieron pasar los datos de temperatura a la próxima solicitud, que también devuelve los mismos datos a los datos temporales.