MVC 3 и PartialViews, скрипты не видны? - PullRequest
1 голос
/ 14 января 2012

в моем файле макета (я использую синтаксис Razor) я включил jQuery script library.

В моем PartalView у меня есть 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 ]

4 голосов
/ 14 января 2012

Где ваш скрипт 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>
}

Таким образом, все скрипты, необходимые для этой страницы, будут отображаться в конце разметки, что является рекомендуемым подходом.

2 голосов
/ 14 января 2012

Если скрипт для jQuery находится после объявления для частичного просмотра, у вас возникнут проблемы. Я бы порекомендовал поставить скрипт jQuery перед RenderBody.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...