Aquí podría ser tu PUBLICIDAD


Mantener el estado List <> a través de los límites de página en ASP.Net

votos
0

Tengo una aplicación ASP.NET WebForms que tiene una función que requiere que el usuario proporcione datos en varios pasos. Esto se implementa actualmente utilizando varias páginas. Por lo tanto, el usuario visita step1.aspx, proporciona cierta información y luego se redirige a step2.aspx para proporcionar información adicional.

Los objetos que se manipulan como parte de este proceso se almacenan en un objeto List <> genérico. Actualmente estoy almacenando esta Lista <> en una variable de Sesión para que el estado de los objetos se mantenga entre las páginas. Una vez que se completa el proceso, los datos se envían a una API del servicio web expuesta por otra aplicación. No quiero mantener el estado de estos datos en una base de datos entre publicaciones, prefiriendo mantenerlo en la memoria hasta que se envíe al servicio web.

Estoy en el proceso de extraer esta lógica de la aplicación web en su propia biblioteca de clases para que podamos usar la misma biblioteca desde una aplicación de Windows.

¿Cuáles son las mejores prácticas para mantener esta información entre publicaciones después de extraer la lógica de negocios a una biblioteca de clases autónoma?

Publicado el 12/03/2009 a las 20:08
fuente por usuario Joe Barone
En otros idiomas...        العربية       

4 respuestas

votos
2

Si desea que la biblioteca sea responsable de administrar su propio estado, puede usar un patrón IoC e inyectar una clase que maneje el estado de los datos. Entonces, por ejemplo, imagina que tienes:

class MyWizardLogic
{
 public void DoStep1()
 {
 }
}

Ahora podemos definir una nueva interfaz llamarlo StateProvider porque proporciona un estado:

interface IStateProvider
{ 
   List<WizState> CurrentState{get;set;}
}

Ahora lo que necesita hacer es decirle a MyWizardLogic que use IStateProvider, hay muchas opciones si quiere usar un marco DI, pero vamos a mantener esto simple. Puede crear una clase SessionStateProvider que almacenará la lista en la sesión. Y podría crear una segunda clase WinFormsStateProvider que almacenará la Lista en una variable estática o en algún otro lugar apropiado.

Yo crearía estas clases en sus respectivos proyectos. Esta clase no debe ser parte de la biblioteca BL.

Ahora puede modificar su método DoStep1 () para tomar un parámetro de IStateProvider. Esto permitirá que su aplicación web o winform especifique qué IStateProvider usar. Además, puede configurarlo a través de una propiedad o en el constructor. Prefiero usar un constructor típicamente.

Ahora todo listo para que su cliente controle las dependencias BL. Esto también debería ayudar a hacer las pruebas más fáciles. Por ejemplo, podría escribir un proveedor de estado falso que valide que se está llamando correctamente.

Respondida el 12/03/2009 a las 08:26
fuente por usuario JoshBerke


Aquí podría ser tu PUBLICIDAD


votos
1

Con ASP.NET, tiene algunas opciones. Puede almacenarlo en estado de sesión, pero eso se convierte rápidamente en un problema debido a varias ventanas del navegador en la misma sesión.

Eso deja pasar la entrada de datos en una página de página a página.

Podría codificar los datos en la cadena de consulta y anexarlos a la URL, pero dependiendo del tamaño de los datos, eso podría ser bastante largo y difícil de manejar.

Eso deja publicar los datos. Puede comenzar con el primer formulario y publicarlo en el segundo formulario. La segunda forma codifica los datos de la primera forma en un campo oculto, y luego pasa sus datos y los datos de campo ocultos a la siguiente forma, etc., etc.

Luego, en la página posterior al último formulario (que procesa todo), tiene todos sus datos para los pasos por separado.

Respondida el 12/03/2009 a las 08:17
fuente por usuario casperOne

votos
0

Puede poner sus múltiples pasos en una página y usar una ASP: MultiView para administrar los diversos pasos. De hecho, MultiView tiene un tipo de plantilla llamado asp: WizardStep. De esta forma, puede mantener el estado entre pasos en las páginas ViewState y eliminar la necesidad de variables de sesión.

MSDN tiene buena información y ejemplos aquí .

Respondida el 16/03/2009 a las 08:26
fuente por usuario iZ.

votos
0

Sugeriría que derive su lógica de negocios en dos clases, una para consumo por formularios web y otra para consumo por formularios de Windows. Ya ha escrito el código de sesión estándar ¿por qué perderlo?

Si está decidido a crear solo una clase, supongo que debe verificar el tipo de objeto que lo llama para definir su lógica.

Respondida el 12/03/2009 a las 08:10
fuente por usuario user58044