Внедрить ресурс javascript в пользовательский серверный элемент управления - PullRequest
0 голосов
/ 14 июля 2011

Я создаю свой первый серверный элемент управления ASP.NET на основе текстового поля с расширенным jQuery, которое я нашел в Интернете. Часть исходного кода включает в себя файл расширения jQuery, поэтому мне нужно включить его с моим контролем. (Базовая библиотека jQuery является требованием веб-приложения, поэтому для наших целей мы можем с уверенностью предположить, что она уже доступна на любой странице, на которой используется элемент управления.)

Сначала я добавил файл javascript в качестве ресурса и смог записать поток в событие Render элемента управления. Хотя он и создал HTML / javascript, как и хотел, jQuery работает не совсем правильно.

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

Как я могу включить этот javascript в свой элемент управления, но обеспечить отображение только одной его итерации? Googling нашел некоторые ссылки на использование в качестве атрибута [assembly] и Page.RegisterClientScriptResource, но я не совсем уверен в этом.

Ответы [ 2 ]

0 голосов
/ 14 июля 2011
Page.ClientScript.RegisterClientScriptResource(getType(page), _
   page.ResolveUrl("~/scripts/jquery.js")

Весь смысл RegisterClientScriptResource состоит в том, чтобы не допустить повторной загрузки скрипта на странице.

Обратите внимание, что в приведенном выше примере предполагается, что вы работаете в Интранете. Если вы работаете с общедоступным веб-сайтом, лучше использовать файл CDN Hosted (http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js)

0 голосов
/ 14 июля 2011

Одна идея состоит в том, чтобы встроить ее в страницу и затем использовать ее как:

const string JAVASCRIPT_RESOURCE = "[namespace].[class].customJS.js"
Stream st = Assembly.GetExecutingAssembly().GetManifestResourceStream(JAVASCRIPT_RESOURCE);
StreamReader sr = new StreamReader( st );
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), 
                                             "customJS", sr.ReadToEnd(), true);

Другая задача - добавить cache-control директивы.Это заставит браузер загрузить его из локального кэша для последующих запросов.Директивы WebResources emit cache, если они встроены в режим разблокировки debug=false.

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