GetElementById не находит контроль, сгенерированный ASP.net
Я просто пытаюсь сохранить метку в переменной в javascript, но по какой-то причине это не работает с document.getElementById('control');
. Я знаю, что мой javascript привязывается к моему html файлу, потому что все остальное работает.
Вот мой код javascript:
function performEvapCooledCircuit(txt)
{
var error = document.getElementById('lblError');
if (txt.value == null || isNaN(txt.value))
{
error.style.visibility = "visible";
}
}
Вот код html для моей метки:
<asp:Label ID="lblError" class="NormLabel" runat="server"
style="color:red; visibility:hidden;" Text="Invalid Input."></asp:Label>
Я получаю сообщение об ошибке, предполагающее ожидаемый объект
Ответы
Ответ 1
Идентификатор, который генерирует ASP.NET, не будет "lblError", поэтому вам нужно будет ссылаться на его ClientID
document.getElementById('<%=lblError.ClientID %>');
Если ваш файл javascript является внешним, мне обычно приходилось писать тип метода "Init" javascript, чтобы убедиться, что мой идентификатор был настроен как свойство
На странице ASPX:
<script type="text/javascript">
var lblError = null;
function InitializeVariables()
{
if (lblError == null) // make sure you only do this once
{
lblError = document.getElementById("<%=lblError.ClientID %>");
}
}
</script>
<asp:Label
ID="lblError"
class="NormLabel"
runat="server"
style="color:red; visibility:hidden;"
Text="Invalid Input."></asp:Label>
Затем в вашем файле javascript вам нужно вызвать InitializeVariables()
, чтобы убедиться, что у вас есть переменные, указывающие на правильные элементы управления asp.net
function performEvapCooledCircuit(txt)
{
InitializeVariables();
if (txt.value == null || isNaN(txt.value))
{
lblError.style.visibility = "visible";
}
}
Ответ 2
"hunter" дает довольно солидный способ сделать что-то, однако, по моему мнению, гораздо лучший способ - использовать свойство "CliendIDMode" в элементе управления и установить это свойство в "Static". Это сделает идентификаторы клиента и сервера одинаковыми. Вот так:
<asp:TextBox ID="ServerAndClientId" runat="server" ClientIDMode="Static" />
Ответ 3
Идентификатор метки не "lblError". Двигатель ASP.net изменил идентификатор. Проверьте исходный код HTML в браузере, чтобы узнать реальный идентификатор.
Ответ 4
Это не HTML для метки, то есть элемент управления ASP.NET, который будет отображаться в HTML до его отправки в ответ. Элементы управления ASP.NET WebForms иногда меняют идентификатор для создаваемого HTML.
Просмотрите источник веб-страницы, чтобы узнать, что идентификатор элемента HTML находится на отображаемой странице.
Ответ 5
Вы можете использовать это:
document.getElementById('<%= lblError.ClientID %>').click()
Начиная с ASP.NET 4.0 вы можете использовать свойство ClientIDMode для элемента. И если вы установите его в Static
, то значение ClientID
будет установлено в значение свойства ID:
<asp:Label ID="lblError" runat="server" ClientIDMode="Static" />
будет отображаться как нечто подобное:
<span id="lblError" name="ctl00$MasterPageBody$ctl00$Label1" />