在_Layout.cshtml中启用自定义脚本ASP.NET MVC 5

时间:2016-06-30 18:08:56

标签: razor asp.net-mvc-5

我正在构建MVC 5,SignalR实时通知应用程序,我想将我的工作脚本放在_Layout.cshtml中,因为例如在添加新项目时我想要显示toastr通知,但脚本将它放置_Layout.cshtml不起作用,我在BundleConfig中添加了脚本,但它不起作用。 注意:除了_Layout.cshtml之外,每个页面上的一切都正常 谁能帮我?非常感谢。 这是我的代码:

$(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();

}); });

如果我将它放在@section scripts{}中的任何页面上,此脚本就有效 我的_Layout脚本部分如下所示:

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

但这种方式不起作用。 如何在我的_Layout页面中正确实现我的脚本以显示每个通知。

2 个答案:

答案 0 :(得分:3)

在_Layout.cshtml页面中,@RenderSection("scripts", required: false)部分仅用作实现@sections scripts {}的网页的占位符,因此您可以看到自己的行为。这是Razor布局引擎的一部分。

有关这一切是如何运作的更多信息,这里有一篇关于ScottGu博客的文章可能有所帮助:ASP.NET MVC 3: Layouts and Sections with Razor

为了让脚本包被包含在_Layout基页上,您需要直接在页面上呈现它,就像正在呈现其他包一样。看起来应该是这样的:

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

**其中scripts是您希望包含的脚本包的名称。

现在,如果您想直接将脚本放在页面上,您也可以这样做。只需确保使用正确的HTML语法正确地将其括起来。请记住,使用_Layout.cshtml作为其布局的任何页面都将包含_Layout.cshtml中的所有脚本。

答案 1 :(得分:0)

非常感谢ryancdotnet,ASP.NET MVC 3: Layouts and Sections with Razor 真的很有帮助,所以我将解决方案将我的脚本放在我想要使用脚本的每个页面上。