Вот решение:
- Создайте внешний файл JavaScript и скопируйте в него весь код.
- Для каждого элемента в пользовательском контроле, на который должен ссылаться javascript, создайте новый объект.
- Вернувшись в файл ascx usercontrol, возьмите id каждого usercontrol и сделайте его членом Object, а значение этого элемента равным id элемента в usercontrol, к которому относится Object. Сделайте это на нагрузке.
- Теперь в каждой функции найдите нужный элемент, получив этот идентификатор из объекта, используя идентификатор своего элемента управления в качестве ключа.
Мое реальное полное решение было немного другим. Каждый пользовательский элемент управления содержит Telerik Radgrid. Обработчики событий на стороне клиента для radgrid имеют вид
radGrid_eventOccurred(sender, args) {
, где sender - объект grid.
Таким образом, вместо использования идентификатора usercontrols в качестве ключа в моем коде, я использовал сетку.
Скажем, мне нужно обновлять текстовое поле внутри пользовательского контроля всякий раз, когда я нажимаю на строку в сетке. Теперь я могу сделать что-то вроде этого:
function radGrid_rowClick(sender, args) {
var text = /*Get the text of the clicked row*/;
var textBox = textBoxesObject[sender];
textBox.set_value(text);
}