none
añadir href a un commandfield RRS feed

  • Pregunta

  • Hola:

    Tengo un commandfield en un gridview

    <Columns>
                            <asp:CommandField ButtonType="Link" ItemStyle-CssClass="centrado" ShowSelectButton="true" />

    En el rowdatabound del gridview hago

    lnkb.Attributes("href") = "#detalle"

    pero veo que hace

    href="#detalle" href="javascript:__doPostBack(&#39;gvdesglose_catalogos&#39;,&#39;Select$0&#39;)"

    Es decir que no me añade el href, sino que crea dos. Y me ejecuta el #detalle (va al detalle), pero no el dopostback

    ¿cómo lo puedo añadir, que haga las dos sentencias? Yo no sé de antemano lo que va a poner en el dopostback. No sé si puedo saber mediante un comando lo que pone en el href original.

    Debe haber alternativas.

    ¿Me podéis ayudar?

    Muchísimas gracias.







    • Editado volar.2016 domingo, 11 de agosto de 2019 19:02
    domingo, 11 de agosto de 2019 18:50

Respuestas

  • ¿cómo lo puedo añadir, que haga las dos sentencias?

    No, no se puede hacer. Y no tiene ningún sentido. El href indica "quiero que navegues a este sitio cuando hagan click". Y solo se puede navegar a un único sitio, no se puede navegar a dos sitios a la vez al hacer click.

    El CommandField está pensado para ejecutar un código en el lado servidor cuando se le hace click. La manera en la que funciona es que ese "dopostback" hace un POST de la página al servidor. El servidor ejecuta el código del evento y vuelve a generar la página HTML y la envía al navegador, que la vuelve a presentar en pantalla en sustitución de la que había antes. Por lo tanto, no se puede "a la vez" navegar a un anchor dentro de la página con un href en el link, porque la página "desaparece" al hacer el click y se vuelve a generar de nuevo.

    • Propuesto como respuesta Sergio ParraModerator lunes, 12 de agosto de 2019 12:32
    • Marcado como respuesta volar.2016 lunes, 12 de agosto de 2019 18:29
    • Desmarcado como respuesta volar.2016 martes, 13 de agosto de 2019 9:18
    • Marcado como respuesta volar.2016 martes, 13 de agosto de 2019 10:30
    lunes, 12 de agosto de 2019 8:17
  • Hola nuevamente:

    Lo logré.

    el atributes queda

    bdcuerpo.Attributes("onload") = bdcuerpo.Attributes.Item("onload") & "irdetalle()"

    Gracias por todo

    • Marcado como respuesta volar.2016 martes, 13 de agosto de 2019 9:34
    martes, 13 de agosto de 2019 9:34

Todas las respuestas

  • ¿cómo lo puedo añadir, que haga las dos sentencias?

    No, no se puede hacer. Y no tiene ningún sentido. El href indica "quiero que navegues a este sitio cuando hagan click". Y solo se puede navegar a un único sitio, no se puede navegar a dos sitios a la vez al hacer click.

    El CommandField está pensado para ejecutar un código en el lado servidor cuando se le hace click. La manera en la que funciona es que ese "dopostback" hace un POST de la página al servidor. El servidor ejecuta el código del evento y vuelve a generar la página HTML y la envía al navegador, que la vuelve a presentar en pantalla en sustitución de la que había antes. Por lo tanto, no se puede "a la vez" navegar a un anchor dentro de la página con un href en el link, porque la página "desaparece" al hacer el click y se vuelve a generar de nuevo.

    • Propuesto como respuesta Sergio ParraModerator lunes, 12 de agosto de 2019 12:32
    • Marcado como respuesta volar.2016 lunes, 12 de agosto de 2019 18:29
    • Desmarcado como respuesta volar.2016 martes, 13 de agosto de 2019 9:18
    • Marcado como respuesta volar.2016 martes, 13 de agosto de 2019 10:30
    lunes, 12 de agosto de 2019 8:17
  • Hola de nuevo:

    Está casi solucionado todo.

    En el onload del body (lo llamo bdcuerpo) pongo una pequeña función en JavaScript

    bdcuerpo.Attributes.Add("onload", "irdetalle()")

    La función es

    function irdetalle() { location.href = "#detalle";}

    Y va a la perfección. Lo único es que me machaca todo lo que estaba en el onload.

    ¿No hay forma de recuperar el onload original, y añadir el irdetalle()?

    Poco a poco :)

    Muchísimas gracias por la ayuda


    • Editado volar.2016 martes, 13 de agosto de 2019 9:27
    martes, 13 de agosto de 2019 9:23
  • Hola nuevamente:

    Lo logré.

    el atributes queda

    bdcuerpo.Attributes("onload") = bdcuerpo.Attributes.Item("onload") & "irdetalle()"

    Gracias por todo

    • Marcado como respuesta volar.2016 martes, 13 de agosto de 2019 9:34
    martes, 13 de agosto de 2019 9:34