Frage

Ich habe eine Ansicht, die eine Master-Seite verwenden, das einige Javascript enthält, die die OnLoad des Körpers ausgeführt werden muss, verwenden. Was ist der beste Weg, um die OnLoad auf meiner Masterpage nur für bestimmte Ansichten zu setzen?

Auf Idee war ich versuchte, den Namen der JavaScript-Funktion als Viewdata zu übergeben. Aber ich will nicht wirklich meine Controller über die Javascript auf der Seite zu wissen, haben. Ich weiß nicht wirklich, diesen Ansatz mag ...

<body onload="<%=ViewData["Body_OnLoad"]%>">
<asp:ContentPlaceHolder ID="MainContent" runat="server" />

Bearbeiten - Ich nehme eine Idee jQuery Dokument bereit Ereignis stattdessen zu verwenden wäre ...

Jede andere Ideen?

War es hilfreich?

Lösung

Ich habe mit meinem aktuellen MVC-Projekt das folgende Muster wurde unter Verwendung, und es scheint ziemlich gut für meinen Js zu arbeiten, arbeiten so weit ...

Im Rahmen meiner Master-Seite lade ich meine Standard-Skriptdateien, die ich möchte alle meine Content-Seiten (Dinge wie jquery.js, global.js, jquery-plugins, CSS-Dateien, etc.) verwendet werden. Ich definiere dann unabhängig von Ereignissen, die in meiner Masterseite benötigt werden (onLoad, onSave, etc.). Jeder Content-Seite, die ich schaffen es haben seine eigene JS-Datei mit ihm verbunden und ich im Inhalt ASPX-Seite, dass die Skriptdatei laden. Etwaige Js Ereignisse, die unterschiedlich zwischen Content-Seiten implementiert werden müssen, um innerhalb der einzelnen Content-JS-Datei behandelt. Also im Grunde meine Master-Seite hat eine Reihe von Js-Funktionen, die mein Content-Seite Skripte implementieren wird. Im Moment habe ich speichern nur diese Vorlage Js Funktion Signaturen in einer Datei und kopieren und fügen Sie sie in jeder neuen content.js Datei, die ich brauche zu erstellen. Aber ich denke über einen Code-Generator oder ein Werkzeug bauen, die diese Vorlage für mich Signaturen aus in alle neuen Js spucken würde Datei Ich brauche erstellt (wenn Js irgendeine Form von Schnittstellenfähigkeit oder Vererbung Features hat lassen Sie mich wissen).

So zu rekapitulieren:

MasterPage.Master Loads: jquery.js, global.js, plugins.js

Content Loads: ContentPage.js

Global.js enthält Funktionen, die die Master-Seite aufruft, das nicht zusammen mit anderen globalen Routinefunktionen zwischen Content-Seiten ändern.

Jede ContentPage.js setzt sie eigene Funktionen für die Inhaltsseite ist zusammen mit den Funktionen der Master-Seite aufruft, die ein anderes Verhalten haben.

Andere Tipps

Nun, da JQuery offiziell Teil von ASP.NET MVC ist, würde ich benutze es empfehlen. Es ist klein, und fügt Tonnen Wert auf Ihre Bewerbung.

Ich würde empfehlen, das Hinzufügen Mustafa Version von JQuery, dass die Intellisense Kommentare hat enthalten:

jquery-1.2.6-Intellisense. js

Dann fügen Sie es zu Ihrem Ordner Scripts (neu in MVC Beta 1) und Referenz es wie folgt aus:

<script language="javascript" type="text/javascript" src="../../Scripts/jquery-1.2.6-intellisense.js"></script> 

In Ihrem Code können Sie nun eine Funktion wie folgt hinzu:

$(document).ready(function() {
   // do stuff when DOM is ready
});

Da Sie erwähnt, dass Sie nur in bestimmten Ansichten passieren möchten, können Sie einen Platzhalter in Ihrem Master-Seite wie folgt hinzufügen könnte:

<asp:contentplaceholder id="JavascriptPlaceholder" runat="server"></asp:contentplaceholder>  

Dann in Ihrer Ansicht, könnten Sie Code setzen dort wählen oder nicht.

, die innerhalb des Kopfteils gehen würde

Lösung aus dem Blog: Verwendung Körper onload mit ASP.net 2.0 Masterpages

MasterPage.master

<head>
<asp:ContentPlaceHolder runat="server" id="Headers">
</asp:ContentPlaceHolder>
<script language=javascript>
   function mp_onload() {
     if(window.body_onload != null)
     window.body_onload();
   }
</script>
</head>
<body onload="mp_onload();">

Default.aspx

<asp:Content ID="Content2" ContentPlaceHolderID="Headers" Runat="Server">
<script language="javascript">
   function body_onload()
   {
       //do something
   }
</script>
</asp:Content>
 

Sie sollten auf jeden Fall sowieso jQuery oder eine andere JavaScript-Framework werden.

Haben Sie Ihre Controller passieren eine Art Statusanzeige auf Ihre Ansichten, aber nicht Ansichten spezifische Dinge wie den Namen der JavaScript-Funktionen. Es ist bis zu Ihren Ansichten Statusanzeigen zu JavaScript-Funktion Namen zuzuordnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top