Изменение видимости метки ASP.NET с помощью JavaScript
У меня есть страница ASP.NET с кнопкой asp:, которая не отображается. Я не могу показать его с помощью JavaScript, потому что он не отображается на странице.
Что я могу сделать, чтобы решить эту проблему?
Ответы
Ответ 1
Если вам нужно манипулировать им на стороне клиента, вы не можете использовать свойство Visible на стороне сервера. Вместо этого установите для стиля отображения CSS значение "none". Например:
<asp:Label runat="server" id="Label1" style="display: none;" />
Затем вы можете сделать его видимым на стороне клиента:
document.getElementById('Label1').style.display = 'inherit';
Вы можете снова скрыть его:
document.getElementById('Label1').style.display = 'none';
Имейте в виду, что могут быть проблемы с ClientID более сложными, чем "Label1" на практике. Вам нужно будет использовать ClientID с getElementById, а не на стороне сервера, если они отличаются.
Ответ 2
Попробуйте это.
<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>
Не используйте серверный код для этого, потому что для этого потребуется обратная передача. Вместо использования Visibility = "false" вы можете просто установить свойство CSS, которое скрывает кнопку. Затем, в javascript, переключите это свойство обратно, когда вы хотите снова отобразить кнопку.
Идентификатор ClientID используется, потому что он может отличаться от идентификатора сервера, если кнопка находится внутри элемента управления Naming Container. К ним относятся группы различных сортов.
Ответ 3
Продолжая, что Дейв Уорд сказал:
- Вы не можете установить для свойства Visible значение false, потому что элемент управления не будет отображаться.
- Вы должны использовать свойство Style, чтобы он отображал значение none.
Страница/Конструкция управления
<asp:Label runat="server" ID="Label1" Style="display: none;" />
<asp:Button runat="server" ID="Button1" />
Код за
Где-то в разделе загрузки:
Label label1 = (Label)FindControl("Label1");
((Label)FindControl("Button1")).OnClientClick = "ToggleVisibility('" + label1.ClientID + "')";
Файл Javascript
function ToggleVisibility(elementID)
{
var element = document.getElementByID(elementID);
if (element.style.display = 'none')
{
element.style.display = 'inherit';
}
else
{
element.style.display = 'none';
}
}
Конечно, если вы не хотите переключаться, а просто показывать кнопку/метку, тогда соответствующим образом настройте javascript-метод.
Важным моментом здесь является то, что вам нужно отправить информацию о ClientID
элемента управления, с которым вы хотите манипулировать на стороне клиента, в файл javascript либо с установкой глобальных переменных, либо с помощью параметра функции, как в моем примере.
Ответ 4
Вы должны опасаться XSS при выполнении таких действий:
document.getElementById('<%= Label1.ClientID %>').style.display
Скорее всего, никто не сможет вмешаться с ClientID Label1 в этом случае, но, чтобы быть в безопасности, вы можете передать его значение через один из методы библиотеки AntiXss:
document.getElementById('<%= AntiXss.JavaScriptEncode(Label1.ClientID) %>').style.display
Ответ 5
Это самый простой способ:
BtnUpload.Style.Add("display", "none");
FileUploader.Style.Add("display", "none");
BtnAccept.Style.Add("display", "inherit");
BtnClear.Style.Add("display", "inherit");
У меня есть противоположность в Else, поэтому она также отображает их. Это можно найти на странице Загрузка или в методе обновления элементов управления на странице.
Ответ 6
Если вы подождали, пока страница будет загружена, а затем установите отображение кнопки в состояние "нет", это должно сработать. Затем вы можете сделать его видимым в более поздней точке.
Ответ 7
Убедитесь, что для свойства Visible установлено значение true или элемент управления не будет отображаться на странице. Затем вы можете использовать script для управления им.