2012-03-12 17 views
12

¿Existe una diferencia funcional entre ViewState en Webforms y ViewBag en MVC? Parecen ser la "misma cosa". Y se puede usar de la misma manera. Lo pregunto porque MVC promueve la red sin estado y no satura los datos en la página, lo que causa una saturación y un rendimiento más lento. Pero parece que puedes hacer eso en MVC también. Todo lo que hicieron, al parecer, es simplemente darle un nuevo nombre.¿Diferencia entre viewbag y viewstate?

Respuesta

6

ViewState en Web Forms estaba serializando datos de formulario en un campo oculto y encriptado en el formulario, por lo que los datos podrían volver a vincularse en la devolución de datos.

ViewBag/ViewData es un diccionario donde puede "rellenar" datos. Por ejemplo, puede agregarlo a su Controlador y luego acceder a él en su Vista. La información es dynamic lo que dificulta el trabajo con los datos. ViewBag no se envía al cliente, es parte de la MVC (canalización del servidor).

Ambos deben evitarse.

ViewState por, bueno, no usarlo y encontrar soluciones. Y ViewBag debe evitarse mediante el uso de ViewModels.

+1

ViewBag tiene su lugar, por ejemplo, usando DropDownList y pasando la lista de selección. Examine MVC Scaffolded CRUD: usa ViewBag. Tu declaración es muy fuerte. Quizás, los Modelos de Vista son preferidos a ViewBag cuando sea apropiado. ver http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications – RickAndMSFT

+1

@ Rick.Anderson-at-Microsoft.com - acordé que mi declaración puede ser fuerte, pero no en el caso de DropDownList. Su ViewModel puede (y debe) tener una propiedad para la 'Lista de selección', a la que se puede vincular en su Vista. Absolutamente no hay necesidad de ViewBag allí. – RPM1984

+0

El código SelectList es generado por las herramientas ASP.NET MVC, y la mayoría de la gente considera que es la elección correcta para un andamiaje automático. – RickAndMSFT

2

ViewBag no se envía al cliente (navegador). Es puramente algo para usar la transición del controlador a la vista (que es antes de que se envíe de vuelta al cliente).

En MVC, si obtiene una devolución de datos desde esa página, no recuperará su "estado", como lo hace Viewstate, el único estado que tiene es lo que envía al navegador y lo que envíe.

5

Viewstate se publica junto con el contenido de un formulario en el servidor y, por lo tanto, los valores en él están disponibles en la publicación posterior. Una viewbag solo contiene los valores hasta que se sirve la página y luego ViewBag se elimina de la memoria. Entonces puede usar ViewState para mantener el estado entre llamadas pero no puede hacer lo mismo con ViewBag.