2016-06-30 8 views
2

Ich baue MVC 5, SignalR Realtime-Benachrichtigungs-App, möchte ich meine Arbeitsskripts in _Layout.cshtml platzieren, weil zum Beispiel auf neue Artikel hinzufügen möchte ich Toastr anzeigen Benachrichtigung, aber Skripte platziert es _Layout.cshtml funktioniert nicht, ich habe Skripte in BundleConfig hinzugefügt, aber es funktioniert nicht. Hinweis: alles funktioniert gut auf jeder Seite außer _Layout.cshtml kann mir jemand helfen? Vielen Dank. Hier ist mein Code:Aktiviere benutzerdefinierte Skripte in _Layout.cshtml ASP.NET MVC 5

$(document).ready(function() { 
toastr.options = { 
    "closeButton": true, 
    "debug": false, 
    "newestOnTop": false, 
    "progressBar": true, 
    "positionClass": "toast-top-right", 
    "preventDuplicates": false, 
    "showDuration": "300", 
    "hideDuration": "1000", 
    "timeOut": "5000", 
    "extendedTimeOut": "1000", 
    "showEasing": "swing", 
    "hideEasing": "linear", 
    "showMethod": "fadeIn", 
    "hideMethod": "fadeOut" 
}; 
$(function() { 

    var notificationhub = $.connection.notificationHub; 

    notificationhub.client.displayMessage = function (message) { 

     toastr.success(message); 
     //$('#notification').html(message); 
    }; 

    $.connection.hub.start(); 

}); }); 

Dieses Skript funktioniert, wenn ich Platz ist es auf jeder Seite in @section scripts{} Mein _Layout Skripte Abschnitt wie folgt aussieht:

@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/bundles/bootstrap") 
@Scripts.Render("~/bundles/notifications") 
@RenderSection("scripts", required: false) 

Aber auf diese Weise nicht funktioniert. Wie kann ich mein Skript korrekt auf meiner _Layout-Seite implementieren, um alle Benachrichtigungen anzuzeigen.

Antwort

3

In Ihrer _Layout.cshtml Seite dient der Teil @RenderSection("scripts", required: false) nur als Platzhalter für Seiten, die die @sections scripts {} implementieren, daher sehen Sie das Verhalten, das Sie sind. Dies ist Teil der Layout-Engine für Razor.

Weitere Informationen darüber, wie das alles funktioniert, hier ist ein Artikel über ScottGu Blog, die helfen können: ASP.NET MVC 3: Layouts and Sections with Razor

Um das Skript-Bundle zu erhalten auf der _Layout Basisseite aufgenommen werden, müssen Sie direkt rendern es auf der Seite, genau wie die anderen Bündel gerendert werden. Es sollte wie folgt aussehen:

@Scripts.Render("~/bundles/scripts") 

** Wo scripts der Name des Skripts bündeln Sie einschließen möchten.

Jetzt, wenn Sie nur das Skript direkt auf die Seite setzen möchten, können Sie das auch tun. Stellen Sie sicher, dass Sie es ordnungsgemäß mit der richtigen HTML-Syntax einschließen. Und denken Sie daran, dass auf jeder Seite, die das _Layout.cshtml als Layout verwendet, alle Skripte in _Layout.cshtml enthalten sind.

+0

Vielen dank ryancdotnet. –