MVC 3和PartialViews,脚本不可见?

时间:2012-01-14 10:43:23

标签: javascript asp.net-mvc-3 layout partial-views

在我的布局文件中(我使用Razor语法)我已经包含了jQuery script library

在我的partialView中,我有jPaginate script library以及生成此插件的代码。问题是,在那种情况下插件没有被渲染,但是如果我将jQuery script library移动到PartialView,它就可以工作。但我无法从布局中移动jQuery script library

  

那么,如何访问包含在Layout页面中的脚本   PartialView?

或许还有其他解决方案?


代码:

Layout.cshtml

<head>
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
</head>

<body>
     @RenderBody()

     @RenderSection("Scripts", false)
</body>

MyView.cshtml

@{ Html.RenderAction("SomeAction", "MyContoller"); } //it outputs the PartialView.vshtml

    @section Scripts {
        <script src="@Url.Content("~/Scripts/jquery.paginate.js")" type="text/javascript"></script>

        <script type="text/javascript">
            $(document).ready(function () {
                $("#pages").paginate({
                    count: 12,
                    start: 1,
                    display: 10,
                    border: false,
                    text_color: '#888',
                    background_color: '#EEE',
                    text_hover_color: 'black',
                    background_hover_color: '#CFCFCF'
                });
            });
        </script>
    }

PartialView.cshtml

<link href="@Url.Content("~/Content/jpaginate.css")" rel="stylesheet" type="text/css" />

<div id="pages"></div>

2 个答案:

答案 0 :(得分:4)

您的jQuery脚本在布局中呈现在哪里?它是在布局的最后?如果是这种情况,那么当您在部分中包含插件时,尚未定义jQuery。我建议你在布局中定义一个包含自定义包含脚本的部分:

<body>
    ...
    ...
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
    @RenderSection("Scripts", false)
</body>
</html>

然后在使用该部分的视图中(不是部分的,部分不应该处理任何脚本,它应该只是标记)覆盖此部分以包含此视图所需的任何插件:

@section Scripts {
    <script src="@Url.Content("~/Scripts/foo.js")" type="text/javascript"></script>
    <script type="text/javascript">
        // some inline script that uses the foo plugin
    </script>
}

这样,此页面所需的所有脚本都将在标记结束时呈现,这是推荐的方法。

答案 1 :(得分:2)

如果jQuery的脚本在部分视图的声明之后,您将遇到问题。我建议将jQuery脚本放在RenderBody

之前