MVC 4 [_Layout.cshtml] - 在页面脚本启动之前添加所有脚本文件

时间:2016-02-21 05:34:34

标签: c# jquery asp.net asp.net-mvc asp.net-mvc-4

Visual Studio中的ASP.NET **项目。

我在_Layout.cshtml文件中包含所有<script>个文件,其中包括底部的所有外部脚本文件...但同时在所有视图中(例如:AboutUs,ContactUs,Products等)。 。),我在页面底部有与页面相关的脚本。

当我渲染页面时,我收到脚本错误,因为页面脚本在jQuery /其他插件之前运行。

我试图将所有插件脚本放在head部分,但我不认为这是个好主意......

现在我的问题是:

  

虽然我在每个视图中都有页面级脚本,但如何放置所有视图   在页面级别<script>标记之前_Layout.cshtml的外部插件脚本?

呈现代码后的参考图片......

enter image description here

使用下面的_Layout.cshtml文件..

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>@ViewBag.Title</title>
    <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
    <link rel="stylesheet" href="@Url.Content("~/Content/ui-bootstrap.css")">
    <link rel="stylesheet" href="@Url.Content("~/Content/themes/base/ui-theme.css")">
    <link rel="stylesheet" href="@Url.Content("~/Content/master.css")">
</head>
<body>

    <header>
        <h3>Header 1</h3>
    </header>

    <div id="body">
        @RenderBody()
    </div>

    <footer>
        &copy; copyright
    </footer>

    <script src="@Url.Content("~/Scripts/jquery.min.js")"></script>
    <script src="@Url.Content("~/Scripts/jquery-ui.min.js")"></script>
    <script src="@Url.Content("~/Scripts/clients-init.js")"></script>

</body>
</html>

和我的AboutUs.cshtml页面如下......

@{
ViewBag.Title = "About";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<section>
    <h2>About us</h2>
    <p>Lorem ipsum dolar sit amet...</p>
    <div class="showHide hide">Hello World!</div>
</section>

<script>
    $(document).ready(function () {
        // Page related script
    });
</script>

1 个答案:

答案 0 :(得分:7)

您可以使用@RenderSection

为脚本定义部分

首先修改您的_Layout.cshtml,使其看起来像下面的代码。请注意,我将@RenderSection放在所有插件脚本文件之后。

<script src="@Url.Content("~/Scripts/jquery.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery-ui.min.js")"></script>
<script src="@Url.Content("~/Scripts/clients-init.js")"></script>
@RenderSection("scripts", required: false)

然后,在您的About.cshtml文件中,您可以使用@section指令定义一个部分,如下面的代码:

@section Scripts {
    <script>
        $(document).ready(function () {
            // Page related script
        });
    </script>
}

通过这样做,所有使用Layout.cshml作为布局的视图都会将其脚本呈现到scripts部分,并在所有插件脚本之后定义到Layout.cshtml部分。

要了解有关使用Razor的布局和部分的更多信息,您可以阅读Scott Guthrie的https://bugs.launchpad.net/ubuntu/+source/hdf5/+bug/1418220