У меня есть страница ASP.NET с кнопкой asp:, которая не отображается. Я не могу показать его с помощью JavaScript, потому что он не отображается на странице.
Что я могу сделать, чтобы решить эту проблему?
У меня есть страница ASP.NET с кнопкой asp:, которая не отображается. Я не могу показать его с помощью JavaScript, потому что он не отображается на странице.
Что я могу сделать, чтобы решить эту проблему?
Если вам нужно манипулировать им на стороне клиента, вы не можете использовать свойство 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, а не на стороне сервера, если они отличаются.
Попробуйте это.
<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. К ним относятся группы различных сортов.
Продолжая, что Дейв Уорд сказал:
Страница/Конструкция управления
<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 либо с установкой глобальных переменных, либо с помощью параметра функции, как в моем примере.
Вы должны опасаться XSS при выполнении таких действий:
document.getElementById('<%= Label1.ClientID %>').style.display
Скорее всего, никто не сможет вмешаться с ClientID Label1 в этом случае, но, чтобы быть в безопасности, вы можете передать его значение через один из методы библиотеки AntiXss:
document.getElementById('<%= AntiXss.JavaScriptEncode(Label1.ClientID) %>').style.display
Это самый простой способ:
BtnUpload.Style.Add("display", "none");
FileUploader.Style.Add("display", "none");
BtnAccept.Style.Add("display", "inherit");
BtnClear.Style.Add("display", "inherit");
У меня есть противоположность в Else, поэтому она также отображает их. Это можно найти на странице Загрузка или в методе обновления элементов управления на странице.
Если вы подождали, пока страница будет загружена, а затем установите отображение кнопки в состояние "нет", это должно сработать. Затем вы можете сделать его видимым в более поздней точке.
Убедитесь, что для свойства Visible установлено значение true или элемент управления не будет отображаться на странице. Затем вы можете использовать script для управления им.