Как убедиться, что файл CSS, который загружается во время частичной обратной передачи из UpdatePanel, применяется до выполнения JavaScript? - PullRequest
2 голосов
/ 20 марта 2012

Я разрабатываю пользовательский элемент управления в ASP.NET 3.5, который использует встроенные ресурсы CSS и JavaScript.Элемент управления работает нормально, но когда он размещен внутри UpdatePanel, возникает проблема синхронизации, когда некоторый JavaScript выполняется до загрузки и применения встроенного файла CSS.JavaScript зависит от свойств в CSS для правильной работы.Я могу получить все, что мне нужно, чтобы правильно отображаться в теге <head>, но я не могу решить проблему с синхронизацией, если не отобразить элемент <style> внутри элемента UpdatePanel и выгрузить в него содержимое файла CSS, заставив его выполнить командузагрузить своевременно.Вот основная идея того, что я пробовал, прежде чем прибегнуть к этому.Поскольку при использовании AJAX нельзя просто добавить ссылку CSS в коллекцию элементов управления заголовка на стороне сервера, предпочтительным способом является регистрация сценария для вставки его в заголовок на стороне клиента.В теге <head> я получу:

<script type="text/javascript" src="/WebResource.axd?d=yvr2-IBhAQRL9mkn-eB25Q2&amp;t=633962690150696688"></script><!-- Custom control functions -->
<script type="text/javascript">//one-line script that inserts CSS link in head</script>
<link rel="stylesheet" type="text/css" href="/WebResource.axd?d=AP8xhKnwsJ9gvRD_ilG0I8ZV2eFcjUevPkzvdMOyuEJttsxE300BabUFg8bCLsiP0&amp;t=634404581860000000" /><!-- the CSS that got loaded by the line above -->
<script type="text/javascript">//one-line script to call a setup function that depends on the CSS file above being loaded and applied already, which it is not</script>

Я знаю, что это проблема с синхронизацией, потому что, если я прохожу через нее в firebug или использую предупреждение или что-то еще, чтобы отложить выполнение JavaScript, тогдаэто работает отлично.Мне не очень интересно использовать такую ​​библиотеку, как LazyLoad.Мне кажется, что если мне нужно использовать такую ​​библиотеку, чтобы сделать что-то столь же простое, как загрузить файл CSS, то я делаю что-то не так.Я также не заинтересован в решениях не UpdatePanel.Сейчас я женат на этом, и мне просто интересно, есть ли надежный способ сделать это с помощью инструментов, которые я использую.

1 Ответ

0 голосов
/ 20 марта 2012

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

Вот код, который запускается на стороне javascript до и после обновления

var prm = Sys.WebForms.PageRequestManager.getInstance();    
prm.add_initializeRequest(InitializeRequest);
prm.add_endRequest(EndRequest);

function InitializeRequest(sender, args) {      

}

function EndRequest(sender, args) {
   // here the update panel finish the loading, so next load the css, 
   //  then execute your javascript
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...