2010-07-07 16 views
9

Ich habe eine ASP.NET-Anwendung, die eine Mischung aus ASP.NET AJAX (einschließlich UpdatePanel) und jQuery von mehreren Entwicklern mit unterschiedlichen Hintergründen verwendet.Richtiger Weg, um Skripte in eine asp.net-Seite aufzunehmen

Einige enthalten Skripts innerhalb des ScriptManager selbst <asp:ScriptManager><Scripts><asp:ScriptReference...., während andere Page.ClientScript.RegisterClientScriptInclude im Code verwendet, und andere verwendet gerade <script src="">, um Skripte aufzunehmen.

Ich möchte, wenn möglich, zu einem einzigen Weg der Handhabung zu konsolidieren, aber ich bin mir nicht sicher, was die Vor-/Nachteile von jedem Weg sind und welcher Weg bevorzugt wird.


Ein Beispiel wäre:

protected override void Render(HtmlTextWriter writer) 
{ 
    Page.ClientScript.RegisterClientScriptInclude("jQuery", ResolveClientUrl("~/scripts/jquery/js/jquery-1.4.2.min.js"));  
    base.Render(writer); 
} 

vs

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
    <Scripts> 
     <asp:ScriptReference Path="~/scripts/jquery/js/jquery-1.4.2.min.js" /> 
    </Scripts> 
</asp:ScriptManager> 

vs

<script src="Scripts/jQuery/js/jquery-1.4.2.min.js" type="text/javascript"></script> 

Antwort

6

Es ist nicht immer möglich, alle Skript im Markup enthalten.
Wenn das Skript von dynamischen Daten abhängt, müssen Sie das Skript aus dem Code dahinter "injizieren".

Meine Regel ist immer zu versuchen, zu vermeiden, Skript aus dem Code nach "injizieren" wenn möglich und nur das als letzten Ausweg zu verwenden.

Edit:
Mit Script bevorzugt wird, wenn Sie viele verschiedene Skriptdateien haben.
Wenn Sie den Scriptmanager verwenden, werden alle Skripte in einer einzigen Datei "verkettet". Dies hat Auswirkungen darauf, wie der Browser die Skripte herunterlädt. Browser haben normalerweise ein Limit von 2 gleichzeitigen Verbindungen und wenn Sie 10 Skripte haben, müssen Sie sie alle in 5 Schritten herunterladen. Scriptmanager wird dafür sorgen, dass alles in einem einzigen Schritt geschieht.

+0

Da ist nichts abhängig von dynamischen Daten, also würde ich es vorziehen, sie zu Markup verschieben. Mein Gefühl, sie in den ScriptManager zu stecken, wäre "besser", aber ich habe nichts, was das unterstützt. – Greg

6

Ein <asp:scriptreference> ist die deklarative Äquivalent zum Aufruf ScriptManager.RegisterScriptBlock(), ähnlich wie jede andere asp.net Control-Deklaration ist ähnlich wie eine programmatische Controls.Add().

Das gesagt, es gibt wirklich keinen "bevorzugten Weg". Wenn Sie verteilbare Websteuerelemente erstellen, sollten Sie die verschiedenen .RegisterScript...()-Methoden aus den Setup-Routinen Ihres Steuerelements aufrufen, statt sich darauf zu verlassen, dass der Benutzer Markup hinzufügen muss.

Wenn Sie nur Skripts in eine Website aufnehmen möchten, ist es wahrscheinlich bequemer, die Markup-Methode zu verwenden.

Wenn Sie Skripte während Ajax-Aufrufen hinzufügen, sollten Sie dazu die ScriptManager verwenden. Wenn Sie Skripts für reguläre Postbacks hinzufügen, sollten Sie die ClientScriptManager dafür verwenden.

So ...Es ist schwer, die Vor- und Nachteile aufzuzählen. Wenn Sie in Ihrem Fall keinen weitervertreibbaren Code erstellen, besteht der offensichtlichste und direkteste Weg darin, Skriptreferenzen über Markup einzufügen, da es tendenziell besser sichtbar ist. Aber ich bin nicht sicher, ob Sie in der Lage sein werden, alle Vorkommen zu einer Methode zu konsolidieren, da alle Methoden aus einem bestimmten Grund existieren und Sie möglicherweise mehrere verwenden müssen.

+0

Große Antwort. Dies gibt mir ein besseres Gefühl dafür, wann ich jeden Ansatz verwenden muss, und in meinem Fall sind es nur Skripte auf einer Website. Ich glaube nicht, dass sich unsere Script-Includes zwischen Gets und Posts unterscheiden. – Greg

Verwandte Themen