Я создал подкласс Table в моем проекте ASP.NET, который создает. Таблица использует класс, который форматирует и создает TableRows и TableCells, которые мы можем назвать RowCreator. Итак, MyTable вызывает rowCreator.CreateRow () и возвращает TableRow с множеством полезных свойств.
В этой TableRow есть TextBox, который должен запускать метод javascript для события onblur, добавляемого классом RowCreator.
textBox.Attributes.Add("onblur", "javascriptMethod('" + textbox.ClientID + "');");
Я также попытался создать подкласс textBox, который реализует метод, который добавляет событие onblur:
Attributes.Add("onblur", "javascriptMethod('" + this + "');")
Что не работает. ID - это просто пространство имен подкласса текстового поля.
А метод JavaScript очень прост:
function javascriptMethod(boxId) {
alert(boxId);
}
Проблема в том, и я предполагаю, что это потому, что элемент управления textbox еще не был добавлен в коллекцию элементов управления, что boxId не является правильным идентификатором клиента. Это то же самое, что и идентификатор на стороне сервера. Есть ли способ получить правильный идентификатор без необходимости сначала добавлять строку с помощью Controls.Add на странице? Есть другие предложения?
Причина, по которой я это делаю, заключается в том, чтобы читать содержимое текстового поля из функции javascript всякий раз, когда оно было изменено. Может, есть способ лучше?





Вы можете изменить вызов javascript на это:
textBox.Attributes.Add("onblur", "javascriptMethod(this);");
Затем вы можете получить доступ к текстовому полю в своем методе javascript:
function javascriptMethod(textbox) { alert(textbox.id); }
Таким образом, вам не нужно будет использовать ClientID элемента управления текстовым полем.
Простое и элегантное решение.