我正在构建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页面中正确实现我的脚本以显示每个通知。
答案 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 真的很有帮助,所以我将解决方案将我的脚本放在我想要使用脚本的每个页面上。