Использование JQuery в качестве встроенного веб-ресурса ASP.NET - PullRequest
9 голосов
/ 08 января 2009

У меня есть серверный элемент управления ASP.NET, который зависит от JQuery для определенных функций. Я пытался добавить в качестве веб-ресурса.

Моя проблема в том, что мой метод включения файла jquery добавляет его в тело или, если быть точным, в форму:

this.Page.ClientScript.RegisterClientScriptInclude(...)

Альтернатива этому - добавить его в качестве литерала в теге head:

LiteralControl include = new LiteralControl(jslink);
this.Page.Header.Controls.Add(include);

Проблема с этим, однако, заключается в существующем коде srcs в заголовке, который использует JQuery с ошибкой, поскольку впоследствии JQuery загружается (ASP.NET добавляет литерал внизу дерева элементов управления).

Есть ли практический способ сделать JQuery встроенным ресурсом, но сначала загруженным в заголовок? Или я должен сдаться сейчас.

Ответы [ 2 ]

7 голосов
/ 08 января 2009

Если вы хотите упаковать jQuery и встроить его в свой собственный серверный элемент управления, вы должны передать его клиенту с помощью ScriptManager. От макушки головы вы должны:

  1. добавьте jQuery.js в ваш проект
  2. в свойстве Build Action, сделать его встроенным ресурсом
  3. в AssemblyInfo.cs для вашего контроль добавить

    [assembly: WebResource("<Your Server Control namespace>.jQuery.js", "application/x-javascript")]
    
  4. Сделайте ваш контроль наследовать от System.Web.UI.ScriptControl (или в наименьшая реализация IScriptControl )

  5. Переопределить 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 будет доступен для вашего собственного клиентского скрипта).

1 голос
/ 26 января 2009

Обновление:

Гораздо более простой способ сделать это - просто динамически добавить тег сценария в свой сценарий и указать хостинг кода Google. например,

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 подтолкнул меня в правильном направлении, я также нашел

http://en.csharp -online.net / Creating_Custom_ASP.NET_AJAX_Client_Controls-IScriptControl.GetScriptReferences_Method .

Хотя моя проблема все еще остается, ScriptManager добавляет ссылки после сценария в заголовке, но я думаю, что это проблема, которую не удается решить. Я решил ответить сам, но также проголосовал за crescentfresh.

...