Как встроить JQuery в пользовательский серверный элемент управления


Я пишу серверный элемент управления, представляющий собой окно поиска с предложениями (когда пользователь начинает печатать, для него появляются соответствующие слова). Я использую jquery и C#.

Элемент управления прекрасно работает, когда я включаю jQuery Lib на странице, на которой я тестирую. Однако он не будет работать, когда я попытаюсь встроить lib в DLL.

Я попытался полностью встроить его и зарегистрировать скрипт:

ClientScriptManager manager = this.Page.ClientScript;
manager.RegisterClientScriptResource(typeof(Search), jqueryResource); //jqueryResource= SearchControl.javascript.jquery.js 

И я также пытался просто добавить тег в заголовок страницы, которая включает в себя jquery:

string javascriptUrl = manager.GetWebResourceUrl(typeof(Search), jqueryResource); 
LiteralControl jquery = new LiteralControl(string.Format(javascriptInclude, jqueryUrl));
Page.Header.Controls.Add(jquery);

Оба способа вызывают ошибки javascript (ожидаемый объект) при попытке получить информацию из элементов управления

var params = $("#searchBox").val(); //called on keyup when typing in textbox

Кто-нибудь делал это раньше? Возможно ли это? Может кто - нибудь пролить на это свет?

PS: сборки уже зарегистрированы в AssemblyInfo.cs-файл.

1 5

1 ответ:

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

Вам нужно использовать RegisterClientScriptResource. Просто вызовите следующий фрагмент кода (взятый из моего статического класса ScriptRegisterHelper) в событии PreRender элемента управления:

/// <summary>
/// Registers the jQuery client script to the page.
/// </summary>
/// <param name="cs">The ClientScriptManager to assign the script to.</param>
internal static void RegisterJQuery(ClientScriptManager cs)
{
    cs.RegisterClientScriptResource(typeof(ScriptRegisterHelper), 
        "MyProject.Resources.jquery.js");
}

И для завершения, вот импликация:

protected override void OnPreRender(EventArgs e)
{
    if (!this.DesignMode)
    {

       // Register the JavaScript libraries
       ClientScriptManager cs = this.Page.ClientScript;
       ScriptRegisterHelper.RegisterJQuery(cs);

    }
}

И файл AssemblyInfo:

[assembly: System.Web.UI.WebResource("MyProject.Resources.jquery.js", "text/javascript")]