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?
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.
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.
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.
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
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.
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.
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.
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