2009-12-08 18 views
5

Piszę kontrolkę serwera, która jest polem wyszukiwania z sugestiami (gdy użytkownik zacznie pisać, pojawią się pasujące słowa, aby je zaznaczyć). Używam jquery i C#.Jak osadzić JQuery w niestandardowym sterowaniu serwerem

Kontrola działa poprawnie, gdy dołączę jquery Lib na stronie, na której testuję. Jednak nie będzie działać, gdy spróbuję osadzić bibliotekę w bibliotece DLL.

Próbowałem całkowicie osadzenie go i rejestracji skryptu:

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

i ja również próbowałem po prostu dodając tag w nagłówku strony, która zawiera jQuery:

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

Both sposoby powodują błędy javascript (oczekiwany obiekt) podczas próby uzyskania informacji z formantów

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

Czy ktoś już to zrobił? Czy to możliwe? Czy ktoś może rzucić trochę światła na to?

PS: Złożenia są już zarejestrowane w pliku AssemblyInfo.cs.

Odpowiedz

6

EDYTOWANIE: Ponownie przeczytaj pytanie i zdałem sobie sprawę, że właśnie powtórzyłem to, co zrobiłeś. Jednak to jest moja implementacja, która działa zgodnie z oczekiwaniami:

Musisz użyć RegisterClientScriptResource. Wystarczy zadzwonić następujący fragment (wzięte z mojego ScriptRegisterHelper klasy statyczne) w przypadku prerender kontroli:

/// <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"); 
} 

I na zakończenie, oto implentation:

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

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

    } 
} 

a plik AssemblyInfo:

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

To jest dokładnie to, co zrobiłem na początku i nadal nie działa. Potem coś kliknęło, a ja kontynuowałem to rozważanie. Spojrzałem na akcję budowania pliku skryptu i Zgadnij co? Zgadza się, zapomniałem ustawić ten na osadzony zasób (Myślisz, że zrobiłby to podczas rejestracji złożeń). W każdym razie teraz działa jak urok. Dzięki za pomoc! –

+0

Wiedziałem, że powinienem był o tym wspomnieć! Doh. – GenericTypeTea

+0

Dziękujemy za przypomnienie o ustawieniu zasobu do osadzenia. To doprowadzało mnie do szału. –