none
Pasar parametros entre ventanas .aspx RRS feed

  • Question

  • hola a todos,
    tengo la siguiente duda, de que manera puedo enviar eficientemente datos desde una pagina .aspx al hacer clic en un boton aspx y este boton me abra una nueva ventana? no lo uqiero pasar por el session, lo intente hacer con crosspagepostback  y tampoco. Les agradecere muchisimo si alguien me orienta un poco.

    mil gracias.
    jin
    Tuesday, August 18, 2009 6:48 PM

Answers

  • Hola  jorgek.

    Revisa esta información: http://jorgepedraza.wordpress.com/2009/07/16/asp-net-popup/

    Cualquier cosa me avisa.

    Calificame como respuesta!!!!!!!!
    Developer
    • Marked as answer by jorgek Tuesday, August 18, 2009 8:17 PM
    Tuesday, August 18, 2009 7:23 PM
  • hola,

    si el material que proporciona Megasoft2 esta muy bueno, pero igualmente hay una pata d ela pregunta que te queda fuera, y es justamente la de pasaje de informacion entre paginas

    bueno aca hay todo un tema, ya que la apertura de una nueva pagina se realiza por medio de javascript o sea todo codigo del lado del cliente

    entonces es todo un tema, ya que no haces postback de la pagina, asi que el objeto Sessin, o cualquier otro no tienes acceso.

    aqui tienes a mi parecer tres opciones, una simple la otra no tanto

    - pasar los parametros por querysting en la url, es la mas simple, y compatible con los popup

    - realziar un postback al servidor y quee ste genere el codigo de javascript que sera enviado al cliente a la vuelta, lo bueno de esto que al poder hacer postback puede pasar parametros utilziando codebehind

    - la otra involucra jquery y la utilizacion del $.ajax.
    no se si conoces jquery, pero la idea es create un web service, o page method, la cuestion es que son una llamada desde el cliente le pases la info a este servicio, y luego sin siquiera un postback lanzar el popup, la pagina que se abre podra tomar datos que se enviaron al webservice, por supuesto aqui se rquiere utilziar objetos Session.


    como veras el tema puede ser complejo o simple dependiendo de la solucion seleccionada

    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by jorgek Tuesday, August 18, 2009 8:17 PM
    Tuesday, August 18, 2009 7:58 PM
  • Hola jorgek,

    deberás disculparme, lo cierto es que ya necesito unas vacaciones! :) Las referencias que te dí ayer no tienen nada que ver con tu problema.
    Como bien dices, lo que tu estás buscando se conoce como Site Navigation. Puedes pasar valores de una página a otra de diferentes formas:

    - Client side tag or code : se trata de añadir un control link en el que, mediante querystring, le pasas los valores deseados a la nueva página, o bien utilizas javascript y el objeto document tal que así: "document.location('nuevapagina')" tambien pasando por querystring los valores.

    - Cross page Postback : Se trata de hacer un postback de la página actual pero redirigiendo a otra página diferente. Una vez en la nueva página, puedes obtener los valores de la página anterior de dos formas:
    1. Mediante la propiedad PreviousPage y el método FindControl puedes buscar un control concreto y obtener su valor.
    2. Si sabes que para llegar a la página B siempre tienes que pasar por A (es decir, desde A haces un Cross Page Postback a B), puedes utilizar la directiva PreviousPageType (<%@ PreviousPageType VirtualPath="~/Default.aspx" %> ) indicando la página que precede a la actual (en el ejemplo te he puesto Default.aspx). De esta forma, en la página A, puedes crearte Propiedades que devuelvan los valores que necesitas. Por ejemplo: En la página A tengo un TextBox llamado Dato1. Podría crearme una propiedad del tipo:
      public string Dato1
      {
               get
               {
                    return Dato1.Text;
               }
      }

      Entonces, si haces uso de la directiva, desde la página B puedes hacer esto:
      string valorDato1=PreviousPage.Dato1;
    - Client-side browser Redirect: Se trata de hacer uso del método Response.Redirect("nueva URL"). Este método no te sirve, ya que pierdes la propiedad PreviousPage.

    - Server-side Transfer: Se trata de utilizar el método Server.Transfer("nueva URL", conservarValores)  indicandole el segundo parámetro a true. De esta forma mantienes la propiedad PreviousPage y los datos te llegan intactos.

    Como ves tienes varias opciones (o bien desde el cliente o bien desde el servidor).
    Espero que ahora si te sea útil.


    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda


    MCP (Microsoft Certified Professional)
    MCTS (Microsoft Certified Technology Specialist)
    MCPD (Microsoft Certified Professional Developer)
    Blog: http://jimenezroda.wordpress.com

    • Marked as answer by jorgek Wednesday, August 19, 2009 1:54 PM
    Wednesday, August 19, 2009 7:41 AM

All replies

  • Hola  jorgek.

    Revisa esta información: http://jorgepedraza.wordpress.com/2009/07/16/asp-net-popup/

    Cualquier cosa me avisa.

    Calificame como respuesta!!!!!!!!
    Developer
    • Marked as answer by jorgek Tuesday, August 18, 2009 8:17 PM
    Tuesday, August 18, 2009 7:23 PM
  • hola,

    si el material que proporciona Megasoft2 esta muy bueno, pero igualmente hay una pata d ela pregunta que te queda fuera, y es justamente la de pasaje de informacion entre paginas

    bueno aca hay todo un tema, ya que la apertura de una nueva pagina se realiza por medio de javascript o sea todo codigo del lado del cliente

    entonces es todo un tema, ya que no haces postback de la pagina, asi que el objeto Sessin, o cualquier otro no tienes acceso.

    aqui tienes a mi parecer tres opciones, una simple la otra no tanto

    - pasar los parametros por querysting en la url, es la mas simple, y compatible con los popup

    - realziar un postback al servidor y quee ste genere el codigo de javascript que sera enviado al cliente a la vuelta, lo bueno de esto que al poder hacer postback puede pasar parametros utilziando codebehind

    - la otra involucra jquery y la utilizacion del $.ajax.
    no se si conoces jquery, pero la idea es create un web service, o page method, la cuestion es que son una llamada desde el cliente le pases la info a este servicio, y luego sin siquiera un postback lanzar el popup, la pagina que se abre podra tomar datos que se enviaron al webservice, por supuesto aqui se rquiere utilziar objetos Session.


    como veras el tema puede ser complejo o simple dependiendo de la solucion seleccionada

    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by jorgek Tuesday, August 18, 2009 8:17 PM
    Tuesday, August 18, 2009 7:58 PM
  • hola Leandro, gracias por tus respuestas,
    quisiera preguntarte de que manera puedo implementar la segunda opcion la de realziar un postback al servidor y quee ste genere el codigo de javascript que sera enviado al cliente a la vuelta, lo bueno de esto que al poder hacer postback puede pasar parametros utilziando codebehind, la verdad no la entiendo muy bien, te agradeceria mucho tu ayuda.
    jin
    Tuesday, August 18, 2009 8:12 PM
  • hola,

    para lograrlo deberias registrar desde tu codebehind, codigo de javascript

    Using JavaScript Along with ASP.NET 2.0


    o sea deberias hacer uso del
    ClientScript.RegisterClientScriptBlock

    para enviar codigo al cliente y este ejecute el windows.open de javascript

    Use of ClientScript.RegisterClientScriptBlock

    aqui un ejemplo
    Use RegisterClientScriptBlock To Popup New Window From ASP.Net Page


    resumen, desde tu codigo una vez que terminas de actrualizar la db, y asl variables globales, ejecutas el codigo que utilice el ClientScript.RegisterClientScriptBlock , y este enviara al cliente el script necesario para que lance el popup


    el script podria ser algo como ser:

    <script type='text/javascript'>

        var opciones="left=100,top=100,width=250,height=150";

        window.open("<url>","<nombre ventana>",opciones);

    </script>



    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Tuesday, August 18, 2009 8:45 PM
  • Hola jorgek,

    Para pasar información entre páginas tienes varias opciones (por cierto, a esto se le llama gestión del estado o State Management):

    - Cookies: puedes pasar información de una a otra página utilizando las cookies del cliente.
    - QueryString: tal y como te ha dicho Leandro, consiste en añadir los parámetros a la URL (ejemplo: http://www.miservidro.com/pagina1?variable1=valor1&variable2=valor2)
    - HiddenFields: puedes añadir a tu página campos ocultos que puedes recuperar luego en el servidor.
    - ViewState: puedes almacenar valores en el viewstate aunque debes tener en cuenta que estos sólo se mantienen en llamadas a la misma página (esta opción no te serviría)
    - ControlState: lo mismo que la anterior pero más enfocada a controles de usuario. Tampoco te sirve.
    - JQuery: (lo que te comenta Leandro).


    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda


    MCP (Microsoft Certified Professional)
    MCTS (Microsoft Certified Technology Specialist)
    MCPD (Microsoft Certified Professional Developer)
    Blog: http://jimenezroda.wordpress.com

    Tuesday, August 18, 2009 8:48 PM
  • Nuevamente muchas gracias por su ayuda,
    A leandro le cuento que si he registrado scripts en mi sitio, pero lo que en verdad queria era hacer algo normal en objetos, como el crosspagepostback, pues con esta tecnica puedo obtener los objetos que necesito desde el nuevo formulario, pero por lo que es una ventana nueva esta tecnica no funciona, pense en implementar algun patron de diseño pero ninguno que conozca aplica, lo mas facil es almacenar valores en el session. De todos modos muchas gracias por su colaboracion e interes.


    jin
    Tuesday, August 18, 2009 9:11 PM
  • Hola jorgek,

    deberás disculparme, lo cierto es que ya necesito unas vacaciones! :) Las referencias que te dí ayer no tienen nada que ver con tu problema.
    Como bien dices, lo que tu estás buscando se conoce como Site Navigation. Puedes pasar valores de una página a otra de diferentes formas:

    - Client side tag or code : se trata de añadir un control link en el que, mediante querystring, le pasas los valores deseados a la nueva página, o bien utilizas javascript y el objeto document tal que así: "document.location('nuevapagina')" tambien pasando por querystring los valores.

    - Cross page Postback : Se trata de hacer un postback de la página actual pero redirigiendo a otra página diferente. Una vez en la nueva página, puedes obtener los valores de la página anterior de dos formas:
    1. Mediante la propiedad PreviousPage y el método FindControl puedes buscar un control concreto y obtener su valor.
    2. Si sabes que para llegar a la página B siempre tienes que pasar por A (es decir, desde A haces un Cross Page Postback a B), puedes utilizar la directiva PreviousPageType (<%@ PreviousPageType VirtualPath="~/Default.aspx" %> ) indicando la página que precede a la actual (en el ejemplo te he puesto Default.aspx). De esta forma, en la página A, puedes crearte Propiedades que devuelvan los valores que necesitas. Por ejemplo: En la página A tengo un TextBox llamado Dato1. Podría crearme una propiedad del tipo:
      public string Dato1
      {
               get
               {
                    return Dato1.Text;
               }
      }

      Entonces, si haces uso de la directiva, desde la página B puedes hacer esto:
      string valorDato1=PreviousPage.Dato1;
    - Client-side browser Redirect: Se trata de hacer uso del método Response.Redirect("nueva URL"). Este método no te sirve, ya que pierdes la propiedad PreviousPage.

    - Server-side Transfer: Se trata de utilizar el método Server.Transfer("nueva URL", conservarValores)  indicandole el segundo parámetro a true. De esta forma mantienes la propiedad PreviousPage y los datos te llegan intactos.

    Como ves tienes varias opciones (o bien desde el cliente o bien desde el servidor).
    Espero que ahora si te sea útil.


    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda


    MCP (Microsoft Certified Professional)
    MCTS (Microsoft Certified Technology Specialist)
    MCPD (Microsoft Certified Professional Developer)
    Blog: http://jimenezroda.wordpress.com

    • Marked as answer by jorgek Wednesday, August 19, 2009 1:54 PM
    Wednesday, August 19, 2009 7:41 AM