2009-01-08 11 views
9

Mam kontrolę serwera ASP.NET, która opiera się na JQuery dla pewnych funkcji. Próbowałem dodać jako źródło internetowe.Używanie JQuery jako wbudowanego źródła internetowego ASP.NET

Mój problem jest moja metoda w tym pliku jquery dodaje go do ciała, lub forma mają być dokładne:

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

Alternatywą do tego celu jest dodanie go jako dosłowny w tagu głowy:

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

problem z tym jest jednak istniejące SRC kod w głowie, które nie używać jQuery, jak jQuery jest załadowany później (ASP.NET dodaje dosłowne na dole drzewa sterowania).

Czy istnieje praktyczny sposób uczynienia z JQuery zasobu osadzonego, ale najpierw załadowanego do nagłówka? Czy powinienem teraz zrezygnować.

+0

Czy mogę zapytać, dlaczego nie tylko dodajesz plik jquery do projektu i odwołujesz się do niego za pomocą znacznika skryptu? – d4nt

+0

Można to zrobić w ten sposób i jest w tej chwili, ale pomysł polega na tym, że kontrola serwera jest samodzielna. –

Odpowiedz

1

Aktualizacja:

Znacznie łatwiejszy sposób to zrobić jest po prostu dodać tag skryptu dynamicznie w skrypcie i punkt do kodu google hostingowej. na przykład

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

Funkcja pochodzi z this article


Crecentfresh pchnął mnie w dobrym kierunku, ja również

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

Mimo to mój problem nadal pozostaje, Menedżer skryptów dodaje referencje po skrypcie w nagłówku, ale uważam, że jest to problem, który nie może zostać rozwiązany.Zdecydowałem się odpowiedzieć sobie, ale także wznowiłem półksiężyc.

7

Jeśli chcesz spakować jQuery i osadzić go w swoim własnym kontrolerze serwera, powinieneś podać go klientowi za pomocą ScriptManager. Ze szczytu głowie trzeba:

  1. dodać jquery.js do projektu
  2. pod jego „Budowanie Akcja” obiekt, zrobić mu osadzonego zasobu
  3. w AssemblyInfo.cs dla Twój kontrola dodać

    [assembly: WebResource("<Your Server Control namespace>.jQuery.js", "application/x-javascript")] 
    
  4. Dokonaj kontroli dziedziczą System.Web.UI.ScriptControl (lub co najmniej wdrożenia IScriptControl)

  5. Zastąp GetScriptReferences:

    protected override IEnumerable<ScriptReference> 
    GetScriptReferences() 
    { 
    return new ScriptReference[] { 
        new ScriptReference("<Your Server Control namespace>.jQuery.js", this.GetType().Assembly.FullName), 
    }; 
    } 
    

Wszystko własnego skryptu klient powinien być ustawiony wewnątrz:

protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors() 

który następnie zapewnić właściwą kolejność zależności (tj jQuery będzie dostępny dla twojego własnego skryptu klienta).

+0

Aha, i prawdopodobnie powinieneś użyć jQuery noConflict() i odsłonić ją wewnątrz własnej przestrzeni nazw po stronie klienta. IE MyNameSpace. $ = JQuery.noConflict() Aby nie zakłócać innych zastosowań $, strona zewnętrzna może działać. –

+0

Muszę spróbować, mieliśmy ten sam problem. – mbillard

+0

To pchnęło mnie we właściwym kierunku, znalazłem także http://en.csharp-online.net/Creating_Custom_ASP.NET_AJAX_Client_Controls-IScriptControl.GetScriptReferences_Method. Mój problem pozostaje jednak nadal, ScriptManager dodaje referencje po skrypcie w głowie . –

Powiązane problemy