RegisterClientScriptInclude по какой-то причине не работает

Я потратил как минимум 2 дня, пытаясь что-нибудь найти и погуглить... но по какой-то причине я не могу заставить RegisterClientScriptInclude работать так, как у всех остальных?

Во-первых, я использую .NET 3.5 Ajax,... и я включаю javascript в свои частичные обновления страницы... используя этот код:

ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "MyClientCode", script, true);

Он работает отлично, мой код javascript, содержащийся в переменной script, включается при каждом частичном обновлении.

Однако javascript в script на самом деле довольно обширен, и я хотел бы сохранить его в файле .js... поэтому логически я создаю файл .js и пытаюсь включить его с помощью RegisterClientScriptInclude... однако я не могу на всю жизнь заставить это работать. вот точный код:

ScriptManager.RegisterClientScriptInclude(this, typeof(Page), "mytestscript", "/js/testscript.js");

файл testscript.js включается только в ПОЛНОЕ обновление страницы... т.е. когда я загружаю страницу или выполняю полную обратную передачу... я не могу включить файл в частичные обновления... понятия не имею, почему... при просмотре ajax POST в firebug я не вижу разница, включаю ли я файл или нет....

оба включения ScriptManager запускаются из одного и того же места в «Page_Load»… поэтому они должны выполнять каждое частичное обновление (но это делает только ScriptBlock).

в любом случае, .. любая помощь или идеи, .. или другие способы решения этой проблемы будут оценены.

Спасибо, Эндрю


person Andrew    schedule 24.03.2010    source источник


Ответы (1)


Вот ключ:

частичное обновление страницы

Вы должны пройти через специальные обручи, чтобы добавить javascript на страницу после первоначальной загрузки, потому что загрузка javascript позже считается некоторыми угрозой безопасности (это также плохо для индексации Google).

Вместо этого зарегистрируйте сценарии при начальной загрузке страницы и просто не выполняйте сценарии до тех пор, пока они не будут запущены. Если эти сценарии создаются динамически, я предлагаю вам исключить статическую часть и провести рефакторинг в качестве методов, которые вы можете вызывать с информацией, возвращаемой динамически при обновлении страницы.

person Joel Coehoorn    schedule 24.03.2010
comment
Спасибо. Проблема с первоначальной регистрацией сценария, а затем его последующим выполнением заключается в том, что в моем сценарии есть прослушиватели событий. Итак, если я зарегистрирую скрипт, прослушивающий событие щелчка внутри некоторого div внутри моей панели обновлений... тогда моя панель обновлений обновится... Мне нужно перезагрузить прослушиватель с помощью RegisterClientScriptBlock, чтобы он заработал... я просто не не хочу код javascript в моем коде.... - person Andrew; 24.03.2010
comment
Файлы .js действительно должны объявлять только методы, которые вы позже сможете вызывать из своего собственного кода (в этом случае, скорее всего, с помощью RegisterClientScriptBlock). Вы пытаетесь использовать включаемые файлы, такие как вызовы функций, и поэтому у вас возникают проблемы, это просто не то, как их следует использовать. - person fyjham; 17.06.2010