Использование jQuery в качестве ASP.NET встроенного веб-ресурса
-
05-07-2019 - |
Вопрос
У меня есть серверный элемент управления ASP.NET, который использует jQuery для определенной функциональности.Я пытался добавить в качестве веб-ресурса.
Моя проблема в том, что мой метод включения файла jquery добавляет его в тело, или, если быть точным, в форму:
this.Page.ClientScript.RegisterClientScriptInclude(...)
Альтернативой этому является добавление его в качестве литерала в тег head:
LiteralControl include = new LiteralControl(jslink);
this.Page.Header.Controls.Add(include);
Проблема с этим, однако, заключается в том, что любой существующий код srcs в head, который использует jQuery, завершается ошибкой, поскольку jQuery загружается впоследствии (ASP.NET добавляет литерал в нижней части дерева управления).
Есть ли практический способ сделать jQuery встроенным ресурсом, но сначала загрузить в head?Или я должен сдаться сейчас.
Решение 2
Обновить:
Гораздо более простой способ сделать это - просто динамически добавить тег script в свой скрипт и указать на хостинг Google code.например ,
function include_dom(script_filename) {
var html_doc = document.getElementsByTagName('head').item(0);
var js = document.createElement('script');
js.setAttribute('language', 'javascript');
js.setAttribute('type', 'text/javascript');
js.setAttribute('src', script_filename);
html_doc.appendChild(js);
return false;
}
include_dom("http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js");
Функция взята из эта статья
Crecentfresh подтолкнул меня в правильном направлении, я также нашел
Моя проблема все еще остается, хотя ScriptManager добавляет ссылки после сценария в head, но я думаю, что это проблема, которая не может быть решена.Я решил ответить сам, но также проголосовал за crescentfresh.
Другие советы
Если вы хотите упаковать jQuery и встроить его в свой собственный серверный элемент управления, вы должны передать его клиенту с помощью ScriptManager. От макушки головы вы должны:
<Ол>в AssemblyInfo.cs для вашего добавить контроль
[assembly: WebResource("<Your Server Control namespace>.jQuery.js", "application/x-javascript")]
Сделайте так, чтобы ваш контроль наследовал от System.Web.UI.ScriptControl (или в как минимум реализовать IScriptControl )
Переопределить GetScriptReferences:
protected override IEnumerable<ScriptReference>
GetScriptReferences()
{
return new ScriptReference[] {
new ScriptReference("<Your Server Control namespace>.jQuery.js", this.GetType().Assembly.FullName),
};
}
Все ваши собственные клиентские скрипты должны быть настроены внутри:
protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors()
Это обеспечит правильный порядок зависимостей (т. е. jQuery будет доступен для вашего собственного клиентского скрипта).