2011-06-10 43 views
6

Tengo una página asp.net que tiene código C# detrás que hace algunas cosas en el método Page_Load() (como consultar una base de datos y hacer algunas otras llamadas para rellenar objetos con datos) . A continuación, mostrar estos datos en la página. Todo esto funciona bien Configuré un par de devoluciones para que cuando se hace clic en un valor en un cuadro de lista, se rellena un control de panel con el resto de los datos del objeto correspondiente. Pensé que las devoluciones de datos eran la forma correcta de hacerlo, pero esto causa que (toda la clase?) Se vuelva a llamar, lo que reinicializa mis objetos y destruye los datos que quiero conservar.Persistir objetos C# a través de las devoluciones

¿Algún tipo de devolución parcial resolverá este problema, o hay una forma mejor de implementar lo que estoy tratando de hacer?

no quiero volver a poblar los objetos cada vez que una devolución de datos se llama, como la toma de una consulta de base de datos, y quiero evitar volver a la consulta cada vez que se hace clic en algo ...

I He encontrado muchas preguntas con respecto a persistentes objetos de Javascript, pero nada que realmente parezca solucionar esto. Estoy usando .Net 4.0

+0

Tiene muchas opciones para conservar sus datos Session/Cache/Cookie/etc ... Otra opción podría ser la publicación parcial con un [UpdatePanel] (http://www.asp.net/ajax/tutorials/understanding -asp-net-ajax-updatepanel-triggers). – Zachary

Respuesta

3

Coloque los objetos en el Session para el usuario actual.

+0

Ok, ¿todavía se está haciendo una devolución de datos completa, considerada la forma correcta de hacerlo? ¿O debería hacer uso de algún tipo de ajax o devolución parcial para cambiar solo ciertas partes de la página? – uscere90

+0

Ahora estás en un tema diferente por completo. Mantener las variables y los objetos para un usuario entre las devoluciones se maneja mejor con 'Session', ya sea InProc al usar una base de datos SQL Server. Si desea o no hacer una devolución de datos completa o utilizar AJAX depende de cómo se presenta su aplicación. Actualizar una cuadrícula o una lista, por ejemplo, probablemente se maneje mejor utilizando una actualización de AJAX, ya que solo necesita tomar los datos y no los elementos de diseño de página, etc. Espero que eso ayude. – Yuck

+0

No recomendaría poner objetos en sesión. – Chris

2

poner todas sus cosas de inicialización en un (!IsPostback) { } y utilizar las devoluciones de datos parciales. De esta forma, el código de inicialización no se vuelve a llamar durante las devoluciones.

+0

Lo tengo en la sección Page_Load; el problema con el que me estoy cruzando es el alcance variable. Tengo varios métodos que uso para trabajar con estos objetos, por lo que se declaran como variables de ámbito de clase. Cuando hago una devolución de datos completa, vuelven a ser declarados y los antiguos se destruyen. – uscere90

+2

Puede usar ViewState en lugar de Session para contener las variables. De esa forma, solo viven dentro de esa página. – Marcus

Cuestiones relacionadas