ASP.net Проблема с порядком работы клиентского скрипта

#javascript #asp.net

#javascript #asp.net

Вопрос:

У меня есть клиентский скрипт на странице, который вызывает динамический скрипт, сгенерированный пользовательским элементом управления с использованием ClientScript.RegisterStartupScript. Сценарий пользовательского управления динамичен, страницы статичны.

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

Однако скрипт пользовательского управления содержится на странице после статического скрипта. Будет ли это иметь значение? Если да, есть ли способ отобразить скрипт перед статическим скриптом — согласно документам MSDN api, единственный способ — объединить все скрипты в один.

Я не могу позволить себе роскошь делать это, потому что динамический скрипт использует ClientID пользовательского элемента управления для уникальной идентификации себя — существует более одного вхождения пользовательского элемента управления.

Есть ли простой способ обойти это?

Приветствия

Ответ №1:

Я советую вам сделать этот «динамический» скрипт статическим, который принимает идентификаторы элементов управления в качестве параметра. Например, у вас может быть что-то вроде:

 function MyFunction(dynamicElementID)
{
    var myelement  =document.getElementById(dynamicElementID);
    //do something with myelement... 
}
  

И затем в своем коде вы можете вызвать этот скрипт следующим образом:

 ClientScript.RegisterStartupScript(this.GetType(),"myscript","MyFunction('" control.ClientID "');");
  

Ответ №2:

Я нахожу немного странным, что у вас есть динамические функции, о которых знают статические скрипты? Можете ли вы показать часть своего кода? Я думаю, что, вероятно, есть лучший подход к разрешению ваших зависимостей.

Обычно динамические элементы управления передают свои идентификаторы универсальным статическим функциям.