Использование jQuery в качестве ASP.NET встроенного веб-ресурса

StackOverflow https://stackoverflow.com/questions/424124

Вопрос

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

http://en.csharp-online.net/Creating_Custom_ASP.NET_AJAX_Client_Controls-IScriptControl .Метод GetScriptReferences_Method.

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

Другие советы

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

<Ол>
  • добавьте jQuery.js в свой проект
  • в разделе "Build Action" Имущество, сделать его встроенным ресурсом
  • в 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 будет доступен для вашего собственного клиентского скрипта).

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top