Einschließlich JavaScript und CSS in Masterseiten und User Controls in asp.net

stimmen
1

Ich versuche, die js und CSS in meinem Code hinter in meinen Masterseite und Benutzersteuerungen in Page_Load Ereignisse aufzunehmen.

Aber anscheinend js bricht seit Page_Load des Benutzers steuert Lasten VOR Page_Load einer Masterseite. Ich schließe meine Jquery Libs auf der gesamte Website in meiner Masterseite verwendet, aber Skripte in Benutzersteuerung verwendet werden, in Benutzersteuerung enthält nur. Die Sache ist die, dass die Benutzersteuerung js scrips jquery Funktionalität verwendet (wie es sein sollte), aber wenn es versucht, zu laufen, bricht es seit jquery Libs noch nicht geladen. Anwyays, gibt es eine Möglichkeit, um dieses frustrierende Chaos?

Ich benutze diese hinter js in meinem Code enthalten. relativeResolvedPath ist im Grunde ResolveUrl (url)

    HtmlGenericControl js = new HtmlGenericControl(script);
    js.Attributes.Add(type, text/javascript);
    js.Attributes.Add(src, relativeResolvedPath);
    Page.Header.Controls.Add(js);
Veröffentlicht am 30/12/2009 um 02:01
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
1

Zuerst Page.Controls.Add den Skriptblock an zufälligen Stellen in Ihrem HTML-Dokument hinzufügen. Sie sollten wirklich sein nur Skriptdateien in der Kopfzeile oder am unteren Rand der Seite hinzugefügt (online Suche wird Ihnen sagen, dass die unten auf der Seite für eine bessere UI Leistung bevorzugt wird).

Um eine richtige Reihenfolge der Javascript - Dateien , um sicherzustellen, würde ich den Blick in ASP.Net AJAX Script Loader und dem Skript - Manager .

Der Script Manager wird funktionieren , wenn Sie die Skripte in der richtigen Reihenfolge hinzufügen. Ihr Problem besser wäre , mit der gelöst AJAX Script Loader

Beantwortet am 30/12/2009 um 02:18
quelle vom benutzer

stimmen
0

Verwenden Sie Page_Init in Ihrem Masterpage Code laufen, bevor Kind Seite und Usercontrol Page_Load Veranstaltungen.

Vergessen Sie nicht, die gelegentlich „View Source“ als eine Plausibilitätsprüfung zu tun. Du musst dafür sorgen, dass Dinge in die Antwort in der Reihenfolge geht man erwarten würde.

Der Client-Skript in Ihrem Benutzersteuerelement verwendet wird nicht ausgeführt, bis die Antwort auf die User-Agenten gesendet wird, so lange, wie die jQuery Bibliotheken früher in der Antwort enthalten sind, sollen Sie in Ordnung sein. Dies ist nicht wirklich ein Problem, wenn Sie Lifecycle Server-Code gemischt mit dem Client-Code haben, die Sie senden.

Ich habe dies in der Spitze meines Master

    <link rel="shortcut icon" href="<%#ResolveUrl("~/favicon.ico" ) %>" />
    <script type="text/javascript">
        var applicationRoot = "<%# webController.AppUrl %>";
    </script>
    <asp:Literal ID="litJqueryMinified" runat="server" /><asp:PlaceHolder id="phjQuery" runat="server"><script src="Script/jquery-1.3.2.js" type="text/javascript"></script></asp:PlaceHolder>
    <asp:Literal ID="litJqueryUIMinified" runat="server" /><asp:PlaceHolder id="phjQueryUI" runat="server"><script src="Script/jquery-ui-1.7.2.custom.min.js" type="text/javascript"></script></asp:PlaceHolder>
    <script src="<%#ResolveUrl("~/Script/jquery.fancybox-1.2.1.pack.js" ) %>" type="text/javascript"></script>
    <script src="<%#ResolveUrl("~/Script/jquery.maskedinput-1.2.2.min.js" ) %>" type="text/javascript"></script>
    <script src="<%#ResolveUrl("~/Script/jquery.cycle.all.min.js" ) %>" type="text/javascript"></script>

und dies in dem Code-Behind:

        // Swap the jQuery inlcude for the minified version
        phjQuery.Visible = false;
        phjQueryUI.Visible = false;
        string jQueryAddress = currentSettings != null && currentSettings["jQueryLocation"] == "local" ? ResolveUrl("Script/jquery-1.3.2.min.js") : "https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js";
        string jQueryUIAddress = currentSettings != null && currentSettings["jQueryLocation"] == "local" ? ResolveUrl("Script/jquery-ui-1.7.2.custom.min.js") : "https://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js";
        litJqueryMinified.Text = "<script src=\"" + jQueryAddress + "\" type=\"text/javascript\"></script>";
        litJqueryUIMinified.Text = "<script src=\"" + jQueryUIAddress + "\" type=\"text/javascript\"></script>";

Dies ermöglicht es mir durch Google in der Produktion minimierte oder gehostet zu haben, aber die Vollversion in dev verwenden, mit Intellisense.

Vergessen Sie das nicht in Ihrem Page_Load zu bekommen ResolveUrl zu arbeiten:

            Page.Header.DataBind();

Hoffe das hilft. :)

Beantwortet am 30/12/2009 um 02:27
quelle vom benutzer

stimmen
1

Verwenden Sie einen Scriptmanager. Es ist sehr leicht:

<asp:ScriptManager ID="SM1" runat="server">
  <Scripts>
    <asp:ScriptReference Name="Script.js" />
  </Scripts>
</asp:ScriptManager>

Um es noch einfacher zu machen, fügen Sie einfach eine leere Skript-Manager Kontrolle zu Ihrer Masterpage:

<asp:ScriptManager ID="MasterPageScriptManager" runat="server" />

Und ein Skript-Manager-Proxy auf allen Ihren Seiten / Kontrollen, die benutzerdefinierte Skripts geladen haben:

<asp:ScriptManagerProxy  ID="SM1" runat="server">
  <Scripts>
    <asp:ScriptReference Name="Script.js" />
  </Scripts>
</asp:ScriptManagerProxy>

Edit: Wenn dies ist nicht das, was Sie suchen, bitte ich um Entschuldigung. Es klingt wie Sie gerade die richtige Stelle Ihrer Skripte zu erarbeiten versuchen. Eine andere Sache, die Sie tun können, wenn dies der Fall ist, ist jQuery in Ihrem Masterpage und zukünftigen Skripte umfassen wie:

<script type="text/javascript" src='<%= ResolveUrl("~/js/script.js") %>'></script>

Ich würde empfehlen, kein Javascript von der Code-Behind-Laden, es sei denn Sie entweder dynamisch den Javascript-Code erstellen, oder Sie bauen die Anwendung und es jemand die Freigabe der Benutzeroberfläche zu optimieren und Sie nicht wollen, dass die Funktionalität manipuliert.

Wenn Sie Warnungen oder etwas Ähnliches einlegen, verwenden Sie so etwas wie:

string myScript = "$(document).ready(function() { alert('message');});";
Page.ClientScript.RegisterClientScriptBlock(this.Page.GetType(), "alerting", myScript, true); 
Beantwortet am 30/12/2009 um 02:34
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more