Передача событий jquery из aspx в ascx - PullRequest
0 голосов
/ 22 октября 2010

Я начал использовать ascx вчера и начал процесс разбиения моей "динамической" страницы default.aspx на более мелкие части.

В моем default.aspx у меня есть много кода JavaScript / jquery, который обрабатывает различныеСобытия.Когда я удалил некоторый HTML-код из .aspx, оставив javascript в default.aspx и поместил его в .ascx, события jquery перестали работать, нужно ли мне писать что-то особенное, чтобы мой JavaScript мог получить доступ к html в моем usercontrol?

Спасибо, М

Ответы [ 3 ]

0 голосов
/ 22 октября 2010

У меня есть страницы, которые содержат пользовательские элементы управления, которые также содержат другие пользовательские элементы управления. У меня была такая же проблема с событиями и стеком рендеринга страниц с этой структурой. Чтобы решить эту проблему, я поместил управление событиями, специфичными для пользовательских элементов управления, в отдельный файл .js, такой как mycontrol.js, и сослался на этот файл .js в файле .ascx (поместите ссылку на него там).

У меня также была ситуация, когда у меня не отображался пользовательский элемент управления, пока он не был помещен в разметку (подэлемент управления), и поэтому события не могли быть размещены в этой точке. Я справился с этим, загрузив пользовательские элементы управления javascript в свой javascript следующим образом:

/* function to allow inclusion of other files 
Included this way to allow addition AFTER the page renders the control - that is, fake inclusion in this file
*/
function includeJS(jsPath)
{
    var script = document.createElement("script");
    script.setAttribute("type", "text/javascript");
    script.setAttribute("src", jsPath);
    document.getElementsByTagName("head")[0].appendChild(script);
};
includeJS('Js/secondusercontrol.js');
  • Отдельный код скрипта для пользовательских элементов управления и ссылки внутри пользовательских элементов управления
  • Включить файлы .js, используя скрипт, если задержка является проблемой
  • поместить все "базовые" сценарии и глобальные объекты (при необходимости) в файл страницы .js
  • используйте .live () и .delegate ()

РЕДАКТИРОВАТЬ: еще одна опция, которая может сработать для вас, которую я забыл изначально, - это использовать функциональность .live() и / или .delegate().

0 голосов
/ 22 октября 2010

учитывает, что идентификаторы элементов меняются с таких вещей, как Control1, на ctl00stuff_Control1, когда вы помещаете их в пользовательские элементы управления

0 голосов
/ 22 октября 2010

Клиентский JavaScript не знает ascx. Символы ascx включаются в страницу перед отправкой в ​​браузер, поэтому браузер видит ее только как одну страницу.

Скорее всего, JavaScript перестал работать, потому что не смог найти элемент с определенным идентификатором или классом. Это могло произойти по ряду причин, например, элемент фактически отсутствует или .net динамически изменил идентификатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...