Domanda

Ho un controllo server ASP.NET che si basa su JQuery per determinate funzionalità. Ho provato ad aggiungere come risorsa web.

Il mio problema è che il mio metodo per includere il file jquery lo aggiunge al corpo, o il modulo per essere esatti:

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

L'alternativa a questo è aggiungerlo come letterale nel tag head:

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

Il problema con questo, tuttavia, è che qualsiasi srcs di codice esistente nella testa che usa JQuery fallisce, poiché JQuery viene caricato successivamente (ASP.NET aggiunge il valore letterale nella parte inferiore dell'albero di controllo).

Esiste un modo pratico per rendere JQuery una risorsa incorporata, ma prima caricata nella testa? O dovrei rinunciare ora.

È stato utile?

Soluzione 2

Aggiornamento:

Un modo molto più semplice per farlo è semplicemente aggiungere il tag di script in modo dinamico, nel tuo script e puntare all'hosting di codice google. per es.

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 funzione è tratta da questo articolo


Crecentfresh mi ha spinto nella giusta direzione, ho anche trovato

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

Il mio problema rimane comunque, ScriptManager aggiunge i riferimenti dopo lo script in testa, ma penso che questo sia un problema che non può essere risolto. Ho scelto di rispondere da solo, ma ho anche votato per il crescentfresh.

Altri suggerimenti

Se vuoi impacchettare jQuery e incorporarlo nel tuo controllo server, dovresti servirlo al client usando ScriptManager. Dalla cima della mia testa devi:

  1. aggiungi jQuery.js al tuo progetto
  2. sotto la sua " Build Action " Proprietà, rendilo una risorsa integrata
  3. in AssemblyInfo.cs per il tuo control add

    [assembly: WebResource("<Your Server Control namespace>.jQuery.js", "application/x-javascript")]
    
  4. Rendi ereditario il tuo controllo System.Web.UI.ScriptControl (o a implementare almeno IScriptControl )

  5. Sostituisci GetScriptReferences:

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

Tutti i tuoi script client devono essere impostati all'interno:

protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors()

Che garantirà quindi il corretto ordine delle dipendenze (cioè jQuery sarà disponibile per il proprio script client).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top