2013-04-12 3 views
0

У меня есть страница asp, в которой я динамически добавляю элемент управления, который я создал (несколько раз). В этом контроле у ​​меня есть текстовое поле для пароля и имени пользователя и кнопка возврата.Найти элемент по идентификатору в динамически добавленном элементе управления

Я использую этот яваскрипта код этого элемента управления и он не:

function HandlePasswordChanged() { 
    document.getElementById("<%=btnRevert.ClientID %>").disabled = false; 
} 
function HandleUserChanged() { 
    document.getElementById("<%=btnRevert.ClientID %>").disabled = false; 
    document.getElementById("<%=txtPassword.ClientID %>").disabled = false; 
} 
function btnRevertClick() { 
    document.getElementById("<%=btnRevert.ClientID %>").disabled = true; 
    document.getElementById("<%=txtPassword.ClientID %>").disabled = true; 
    document.getElementById("<%=txtUsername.ClientID %>").value = document.getElementById("<%=systemAccount.ClientID %>").value; 
    document.getElementById("<%=txtPassword.ClientID %>").value = ""; 
} 

, что он делает это, когда я нажимаю на кнопку REVERT на одном элементе управления отключает текстовое поле на другой элемент управления - getelement не удается найти исправьте.

Как это исправить?

+0

Рассмотрите возможность размещения рендеринга html –

ответ

0

Мне удалось найти решение.

Проблема заключалась в том, что каждый раз, когда я добавлял элемент управления acsx с кодом javascript, он добавлял несколько функций с тем же именем, но внутри было другое. когда один элемент управления хотел назвать свою «собственную» функцию, он просто использовал первый, так как все они были названы одинаковыми.

Мое решение было изменить функцию от этого:

function HandleUserChanged() { 
    document.getElementById("<%=btnRevert.ClientID %>").disabled = false; 
    document.getElementById("<%=txtPassword.ClientID %>").disabled = false; 
} 

к этому:

function HandleUserChanged(btnRevertId, txtPasswordId, cellPasswordId) { 
    document.getElementById(btnRevertId).disabled = false; 
    document.getElementById(txtPasswordId).disabled = false; 
} 

, а затем в C# код я добавить это:

txtUsername.Attributes.Add("onchange", "HandleUserChanged(\"" + btnRevert.ClientID + "\", \"" + txtPassword.ClientID + "\", \"" + cellPassword.ClientID + "\")"); 

Таким образом, каждый элемент управления точно знает, какие элементы управления принадлежат ему, и отправляет правильные параметры функции.

1

Если вы работаете на .net 4.0:

Вы можете установить ClientIDMode="Static" для динамически добавляемых элементов управления. Кроме того, вы должны убедиться, что вы устанавливаете уникальные идентификаторы для своих элементов управления.

+0

Элемент управления, который я добавляю, является acsx, который я создал, и в нем у меня есть текстовые поля со статическими идентификаторами, поэтому, когда я добавляю кратные данные acsx, у меня нет уникальных идентификаторов для текстовых полей внутри. – EitanT

Смежные вопросы