2009-01-08 12 views
9

J'ai un contrôle serveur ASP.NET qui repose sur JQuery pour certaines fonctionnalités. J'ai essayé d'ajouter en tant que ressource Web.Utilisation de JQuery en tant que ressource Web intégrée ASP.NET

Mon problème est ma méthode d'inclure le fichier jquery il ajoute au corps, ou la forme pour être exact:

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

L'alternative à cela est d'ajouter comme littéral dans la balise head:

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

le problème est cependant tout SRCs de code existant dans la tête qui utilisent JQuery échouent, comme JQuery est chargé par la suite (ASP.NET ajoute le littéral au bas de l'arbre de commande).

Existe-t-il un moyen pratique de faire de JQuery une ressource intégrée, mais chargée dans la tête en premier? Ou devrais-je abandonner maintenant.

+0

Puis-je vous demander pourquoi ne pas simplement ajouter le fichier jquery à votre projet et le référencer avec une balise de script? – d4nt

+0

Cela peut être fait comme ceci et est pour le moment, mais l'idée est que le contrôle serveur est autonome –

Répondre

1

Mise à jour:

A beaucoup plus facile façon de le faire est d'ajouter simplement la balise de script dynamique, dans votre script et pointer vers le code Google hébergement. par exemple.

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

La fonction est prise de this article


Crecentfresh m'a poussé dans la bonne direction, je trouve aussi

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

Mon problème reste quand même, le ScriptManager ajoute les références après le script dans la tête mais je pense que c'est un problème qui ne peut pas être résolu.J'ai choisi de me répondre, mais aussi augmenté crescentfresh.

7

Si vous voulez empaqueter jQuery et l'intégrer dans votre propre contrôle serveur, vous devez le servir au client à l'aide de ScriptManager. Du haut de ma tête, vous devez:

  1. ajouter jquery.js à votre projet
  2. sous son « Build action » Propriété, en font une ressource intégrée
  3. dans les AssemblyInfo.cs pour ajouter votre contrôle

    [assembly: WebResource("<Your Server Control namespace>.jQuery.js", "application/x-javascript")] 
    
  4. Faites votre commande hériter de System.Web.UI.ScriptControl (ou à moins mettre en œuvre IScriptControl)

  5. Override GetScriptReferences:

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

Toutes votre propre script client doit être installé à l'intérieur:

protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors() 

qui sera ensuite assurer l'ordre correct des dépendances (c.-à-jQuery sera disponible pour votre propre script client).

+0

Oh, et vous devriez probablement utiliser jQuery noConflict() et l'exposer dans votre propre espace de noms côté client. IE MyNameSpace. $ = JQuery.noConflict() Afin de ne pas interférer avec les autres utilisations de $, la page externe pourrait être utile. –

+0

Je dois essayer, nous avons eu le même problème. – mbillard

+0

Cela m'a poussé dans la bonne direction, j'ai également trouvé http://en.csharp-online.net/Creating_Custom_ASP.NET_AJAX_Client_Controls-IScriptControl.GetScriptReferences_Method. Mon problème reste quand même, le ScriptManager ajoute les références après le script dans la tête . –