none
Iframe y eventos

    Pregunta

  • Hola a todos, bueno, les cuento mi caso: tengo un treeview, el cual al dar click en cada nodo me cambia la pagina de un iframe, ahora se me ha pedido q el guardado sea automatico, es decri, digamos q estoy en el nodo1, apenas cambien al nodo 2 se guarden los datos q tengo en la pagina relacionada con el nodo2, estuve pensado en dos opciones pero no se si funcionen:

    1. en el evento de cambiar el nodo, llamar un evento q este en la pagina del iframe.. pero como hacerlo??

    2. capturar desde la pagina del iframe alguna evento cuando la pagina no sea visible o algo por el estilo, pero la verdad no se si se pueda?

    agradezco la ayuda...gracias

    viernes, 9 de abril de 2010 14:44

Respuestas

Todas las respuestas

  • hola

    la verdad esta complejo esto que planteas, ya que imagino el treeview es el de asp.net y realzia un postback cuando realizas la seleccion

    algo qeu se me ocurre pero no se si es que se podra hace entre fames es desde javascript lanzar el postback de boton aceptar de la pagina que guarda la info

    How to call Postback from Javascript

    Understanding the JavaScript __doPostBack Function

    How to do a Postback with Client Side Object

    Calling __doPostBack in javascript

    Evitar PostBack en un botón html runat=server

    como veras usa el __doPostBack este metodo en javascript ya esta creado por el mismo .net

    en este pregunta del foro veras algunos ejemplos

    __doPostBack('btn', 'Click'); not firing button click event

    por ahi para comunicar los frames deberias crear una funcion que invoques entre estos

     

    lo que igual no me cierra es que pasa con las validaciones, digo si el usuario no completo el todos los datos y cambia de nodo, el guadado no se realizara (ya que las validaciones de los controles en javascrip detendran el postback), pero el nodo si cambiara

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 9 de abril de 2010 15:09
  • Julitogtu una pregunta, antes de hacer todo lo que estas definiendo para trabajar con iframes. Tienes en cuenta la restricción de seguridad en las llamadas entre dominios?

    Piensa que si no controlas la seguridad y son paginas de diferentes dominios te dará un error de seguridad al intentar acceder al código script de otro dominio.

    http://geeks.ms/blogs/mrubino/archive/tags/iframe/default.aspx

    Te recomiendo que antes de que te líes más te asegures que no tendrás problemas con las Cross domains calls.

    Saludos.


    Si la respuesta ha sido de utilidad marca la como respuesta correcta.

    Marc Rubiño
    Web: http://lonetcamp.com
    Blog: http://geeks.ms/blogs/mrubino

     

    viernes, 9 de abril de 2010 15:19
    Moderador
  • Hola, el iframe lo tengo dentro de un updatepanel, y este panel lo refresco asincronamente con el treeview... pero entonces... creo q tendre bastante problemas con los frames, igual voy a mirar esos links y acualquier cosa posteo...

    lo q pasa es q con treeviews e iframe fue la mejro solucionq  encontre, te comento por si me das una idea..el usuario puede tener desde 1 hasta 45 opciones(dependiendo de la configuracion en la base de datos), y cada una de esas opciones tiene bastantes cosas, pero el problema, es q para el usuario puede devolverse a una seccion rapidamente, para ver la info, pq todas la secciones son relacionadas, entonces si lo mando como tal a otra pagina, perderia la usabilidad del manejo de las secciones, y pues con treeview y el iframe ha sido rapido (como uso update panel mucho mejor)....

    creo q contandote todo talvez me puedas colaborar mejor.. gracias

    viernes, 9 de abril de 2010 15:20
  • Porque no utilizas controles de usuario para mostrar las secciones? de esta manera las puedes cargar en un panel y de cara a la usabilidad no pierdes rapidez.

    El control de usuario lo puedes utilizar en la pagina original y además como ventanas modales para facilitar el trabajo al usuario.

    Saludos.

     


    Si la respuesta ha sido de utilidad marca la como respuesta correcta.

    Marc Rubiño
    Web: http://lonetcamp.com
    Blog: http://geeks.ms/blogs/mrubino

     

    viernes, 9 de abril de 2010 15:26
    Moderador
  • Hola Marc, el problema es como podria apadaptar la interfaz, ya q debe ser bastante sencilla de entender para el usuario, no si depronto tengas algun ejemplo para poder mirarlo.. y con controles de usuario como lo podria hacer?

    Gracias

    viernes, 9 de abril de 2010 15:36
  • Esta vez te prometo hacer un ejemplo, haber que te parece.

    Haber si tengo tiempo esta tarde o mañana como mucho ;-)


    Si la respuesta ha sido de utilidad marca la como respuesta correcta.

    Marc Rubiño
    Web: http://lonetcamp.com
    Blog: http://geeks.ms/blogs/mrubino

     

     

    viernes, 9 de abril de 2010 16:59
    Moderador
  • Hola Marc te lo agardezco mucho.. mira he intentadno hacer lo siguiente:

    var a = parent.frames(0).document.forms("form1").document.getElementById("ButtonGuardar");

    y luego a.click;

    pero el click nunca se me ejecuta... y ya verifique y a no esta vacia ni nula... pq igual pense en hacer algo como un sistema de tabs o algo por ele stilo, el problema es q si meto todo el coidgo de todas las secciones sera demasiado codigo.. tango codebehin como de html...

    de nuevo gracias

    viernes, 9 de abril de 2010 17:05
  • Lo prometido es deuda, mirate esto y dime si te sirve. Por experiencia lo de los iframes  siempre causa dolores de cabeza ;-)

    http://geeks.ms/blogs/mrubino/archive/2010/04/12/cargar-controles-de-usuario-din-225-micamente-asp-net-ajax.aspx

    Cómo: Convertir páginas de formularios Web Forms en controles de usuario ASP.NET.  

    Saludos


    Si la respuesta ha sido de utilidad marca la como respuesta correcta.

    Marc Rubiño
    Web: http://lonetcamp.com
    Blog: http://geeks.ms/blogs/mrubino

     

    • Marcado como respuesta JulitogtuMVP martes, 13 de abril de 2010 20:38
    lunes, 12 de abril de 2010 14:48
    Moderador
  • Hola Marc, gracias por tu ejemplo, de casualidad tienes el ejemplo paar descargar, y asi poder mirarlo mejor.. ya que no dejaste luink para descargarlo...

    Lo voy a probar y te cuento.. gracias

    lunes, 12 de abril de 2010 16:52
  • Hola Marc, ya implemente todo (en visual basic) y cuando doy click en el nodo me marca el siguiente error:

    no se encuentra el recurso

    /Hc WebSite/BLOCKED SCRIPTPageMethods.CargarControl('1', CargarControlOK, CargarControlKO);

    en la pagina tengo un scriptmanaher con enablepagemethods en true, y ya agrege el codigo javascritp, pero no se pq me muestra ese error, espero me puedas ayudar....

    gracias

    lunes, 12 de abril de 2010 19:31
  • Recuerda que el método tiene que ser estático, sino puedes probar con un servicio web.

    Ejemplo:

    http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys.Ejemplos/UserControlsAjax.zip

    Dime que tal.

     


    Si la respuesta ha sido de utilidad marca la como respuesta correcta.

    Marc Rubiño
    Web: http://lonetcamp.com
    Blog: http://geeks.ms/blogs/mrubino

     

    • Marcado como respuesta JulitogtuMVP martes, 13 de abril de 2010 20:38
    martes, 13 de abril de 2010 7:18
    Moderador
  • Hola, gracias por tu ejemplo, tenia mal la parte del nodo.navigateurl... bueno, ahora me surgne dos cosas:

    1. en tu ejemplo, en en formcontrol, al boton le agrege un manejador para el evento click, para q me escriba dos textos en cada textbox, y me saca el sigueinte error:

    La información de estado no es válida para esta página y podría estar dañada.

    2. en lo q yo estoy hacinedo, llamo todo correcatemente, pero cuando debe mostrar el usercontrol me muestra el siguiente error, que es muy parecido al de tu ejemplo:

    Microsoft JScript runtime error: Sys.WebForms.PageRequestManagerServerErrorException: La información de estado no es válida para esta página y podría estar dañada.

    tienes alguna idea... gracias

    martes, 13 de abril de 2010 14:23
  • Ufff, esto se complica. El error es por que modificamos los controles del formulario y cuando hace postback el contenido del viewstate no coincide con el de la página.

    Esto no tiene una solución muy elegante, pero una posible opción sería anular el viewSaçtate de la página.

    Puedes eliminar el tag del viewstate sobreescribiendo el render de la página.

    Ejemplo:

    protected override void Render(HtmlTextWriter writer)
    {
         StringBuilder stringBuilder = new StringBuilder();
         StringWriter stringWriter = new StringWriter(stringBuilder);
         HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
         base.Render(htmlWriter);
         string yourHtml = stringBuilder.ToString();
         System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"(<input type=""hidden"" name=""__VIEWSTATE"" id=""__VIEWSTATE"" value=""[a-zA-Z0-9\+=\\/]+"" />)");
         yourHtml = reg.Replace(yourHtml, "");
         writer.Write(yourHtml);
    
    }

    Prueba esto pero tienes que tener en cuenta que tienes que volver a cargar todos los controles, porque no tienes estado en la página.

    Saludos.


    Si la respuesta ha sido de utilidad marca la como respuesta correcta.

    Marc Rubiño
    Web: http://lonetcamp.com
    Blog: http://geeks.ms/blogs/mrubino

     

    martes, 13 de abril de 2010 15:44
    Moderador
  • Hola Marc, si la cosa esta bien complicada, se me ha ocurrio otra idea, pero no se si el rendimiento se baje demasiao, te comento:

    cargo el treeview desde la base de datos, ademas tengo un control de usuario para cada seccion, y un multiview, con 45 view q son el total de mis secciones, asi cuando se seleccione determiando nodo en mi treeview, cambio el activeviewindex, y como son controles de usuario, le puedo decir usercontrol1.guardar(), q seria el evento de mi usercontrol q me guarda lo q tengo en la pagina... bueno es una idea.. pero no se si sera la mejor... me gustaria tu opinion.. gracias

    • Marcado como respuesta JulitogtuMVP martes, 13 de abril de 2010 20:37
    • Marcado como respuesta JulitogtuMVP martes, 13 de abril de 2010 20:37
    martes, 13 de abril de 2010 15:55
  • Bueno, supongo que es la forma más rápida y que te dará menos problemas. Pero sobre todo no cargues los datos en el PageLoad, sino te cargaran todos los controles al cargar la página. Lo que tienes que hacer es un método que se encargue de cargar el control y lo utilices solo cuando vallas a mostrar el control, de esta manera solo cargas cada control cuando lo necesitas y no antes.

    Bueno espero que te funcione ;-)

     


    Si la respuesta ha sido de utilidad marca la como respuesta correcta.

    Marc Rubiño
    Web: http://lonetcamp.com
    Blog: http://geeks.ms/blogs/mrubino

     

    martes, 13 de abril de 2010 16:26
    Moderador
  • Hola, si creo q si, llevo dias con esto, y si me di cuenta q no puedo cargar nada en el pageload, pq se me cargara todo siempre, bueni gracias por tu ayuda... una pregunta adicional, para no abrir un nevo post, lo q pasa es q tengo el siguiente caso, tengo un grid con datos de clientes, digamos nombre y sexo, y eso lo envio a otra pagina, por ejemplo

    julio m >> lo mestro es campos de texto en la otra pagina

    pero si antes de enviarlo, le hago un cambio(no por base de datos) y dejo julio f, cuando lo mando a la otra pagina, me muetsra julio m en lugar de julio f, es como si quedara la pagina pegada (supongo q puede ser cache o algo asi), y me toca darle f5 para q me muestre bien los datos.... tienes alguna idea.. gracias

    martes, 13 de abril de 2010 16:34
  • Gracias por ayuda... nos estaremos hablando en un nuevo post !!
    martes, 13 de abril de 2010 20:37