Cambiar la visibilidad de ASP.NET etiqueta con JavaScript


Tengo un ASP.NET página con un botón asp: que no es visible. No puedo hacerlo visible con JavaScript porque no se renderiza en la página.

¿Qué puedo hacer para resolver esto?

Author: Abbas, 2008-08-11

7 answers

Si necesita manipularlo en el lado del cliente, no puede usar la propiedad Visible en el lado del servidor. En su lugar, establezca su estilo de visualización CSS en "ninguno". Por ejemplo:

<asp:Label runat="server" id="Label1" style="display: none;" />

Entonces, podría hacerlo visible en el lado del cliente con:

document.getElementById('Label1').style.display = 'inherit';

Usted podría hacerlo oculto de nuevo con:

document.getElementById('Label1').style.display = 'none';

Tenga en cuenta que puede haber problemas con el cliente siendo más complejo que "Label1" en la práctica. Necesitarás usar el ClientID con getElementById, no el lado del servidor Identificación, si difieren.

 41
Author: Dave Ward,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-11 13:32:21

Prueba esto.

<asp:Button id="myButton" runat="server" style="display:none" Text="Click Me" />

<script type="text/javascript">
    function ShowButton() {
        var buttonID = '<%= myButton.ClientID %>';
        var button = document.getElementById(buttonID);
        if(button) { button.style.display = 'inherit'; }
    }
</script>

No use código del lado del servidor para hacer esto porque eso requeriría un postback. En lugar de usar Visibility="false", puede establecer una propiedad CSS que oculte el botón. Luego, en javascript, cambie esa propiedad de nuevo cada vez que desee mostrar el botón de nuevo.

El ClientID se usa porque puede ser diferente del ID del servidor si el botón está dentro de un control de Contenedor de Nombres. Estos incluyen Paneles de varios tipos.

 10
Author: EndangeredMassa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-07 02:58:52

Continuando con lo que Dave Ward dijo:

  • No puede establecer la propiedad Visible en false porque el control no se renderizará.
  • Debe usar la propiedad Style para establecer su display a none.

Diseño de página/Control

<asp:Label runat="server" ID="Label1" Style="display: none;" />

<asp:Button runat="server" ID="Button1" />

Código detrás de

En algún lugar de la sección de carga:

Label label1 = (Label)FindControl("Label1");
((Label)FindControl("Button1")).OnClientClick = "ToggleVisibility('" + label1.ClientID + "')";

Javascript file

function ToggleVisibility(elementID)
{
    var element = document.getElementByID(elementID);

    if (element.style.display = 'none')
    {
        element.style.display = 'inherit';
    }
    else
    {
        element.style.display = 'none';
    }
}

Por supuesto, si no desea alternar, sino solo mostrar el botón/etiqueta, ajuste el método javascript en consecuencia.

El punto importante aquí es que necesita enviar la información sobre el ClientID del control que desea manipular en el lado del cliente al archivo javascript, ya sea estableciendo variables globales o a través de un parámetro de función como en mi ejemplo.

 4
Author: mbillard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-11 14:13:11

Debes tener cuidado con XSS cuando hagas cosas como estas:

document.getElementById('<%= Label1.ClientID %>').style.display

Lo más probable es que nadie pueda manipular el ClientID de Label1 en este caso, pero solo para estar seguro es posible que desee pasar su valor a través de uno de los métodos de la biblioteca AntiXSS:

document.getElementById('<%= AntiXss.JavaScriptEncode(Label1.ClientID) %>').style.display
 3
Author: Ian Oxley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-19 14:41:24

Esta es la forma más fácil que encontré:

        BtnUpload.Style.Add("display", "none");
        FileUploader.Style.Add("display", "none");
        BtnAccept.Style.Add("display", "inherit");
        BtnClear.Style.Add("display", "inherit");

Tengo lo contrario en el Else, por lo que maneja mostrarlos también. Esto puede ir en la carga de la página o en un método para actualizar los controles en la página.

 1
Author: Michael Emerick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-10 22:36:52

Si espera hasta que se cargue la página, y luego establece la visualización del botón en ninguno, eso debería funcionar. Luego puedes hacerlo visible en un momento posterior.

 0
Author: Brian Childress,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-11 13:29:38

Asegúrese de que la propiedad Visible esté establecida en true o el control no se procesará en la página. A continuación, puede utilizar script para manipularlo.

 0
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-11 13:32:43