Частичное представление бритвы в ASP.NET MVC 3 - jQuery включен в основной макет - PullRequest
0 голосов
/ 26 сентября 2011

Частичное представление, которое я использую, требует включения определенных библиотек jQuery, и в настоящее время я пытаюсь придумать, как лучше их добавить.

Моя текущая настройка выглядит следующим образом:

_Layout.cshtml:

...
@if (ViewBag.jQuery)
{
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")"
            type="text/javascript"></script>
}
...

Index.cshtml:

...
@{ Html.RenderPartial("PartialView", 
       new MVCModel.Models.MyModel(), 
       new ViewDataDictionary { { "ViewBag", ViewBag } }); }
...

PartialView.cshtml:

...
@{
    if (ViewBag.ViewBag != null)
    {
        var vb = (dynamic)ViewBag.ViewBag;
        vb.jQuery = true;
    }
}
...

Итак, что я пытаюсьДля этого нужно «включить» библиотеку в частичном представлении, и этот логический тип распространяется до основного макета.Это позволяет мне включать библиотеку столько раз, сколько я хочу, где бы я ни хотел (много частичных представлений или одно представление использовалось несколько раз), но оно будет включено только один раз.Вдобавок ко всему, я получаю контроль над порядком включений, так что я могу убедиться, что сначала включаются зависимости файлов.

Мне просто интересно, есть ли более приятный способ справиться с этим.

Прямо сейчас мои две самые большие проблемы:

  1. ViewBag не строго типизирован, поэтому intellisense не скажет мне, какие библиотеки доступны для меня.
  2. Передача ViewBag в частичное представление, чтобы я мог использовать его повторно.

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

Вот простой способ достичь своей цели.

В представлениях MVC Razor есть функция, называемая RenderSection. Имеет синтаксис вроде

@RenderSection ("occasionalScripts", false)

(случайный_скрипты - это название раздела, а значение false означает, что раздел является необязательным и может отображаться не на каждой странице.)

Вы хотели бы включить это в ваш _Layout.cshtml, который Views\Shared. Это позволит вашему основному шаблону сценария отображать раздел с определениями сценариев, если он определен для определенного представления.

Как правило, вы хотите поместить это внизу вашей страницы непосредственно перед закрывающим тегом </body>. (Это лучший метод для повышения производительности.) Я бы перечислил все остальные мои скрипты (те, которые загружаются на каждой странице) прямо над ним. Причина в том, что порядок загрузки скриптов jQuery очень важен.

В каждом из ваших представлений, где у вас есть специальные сценарии, добавьте следующее:

@section occasionalScripts {
... put script references here
}

Если у вас есть представление, которое не требует специальных сценариев, вам не нужно включать этот раздел в него. false на теге @RenderSection будет соответствовать любому представлению, где отсутствует тег @section.

На каждой странице, где реализована эта функциональность, вы можете выбирать разные сценарии.

При желании вы можете указать несколько разделов для разных категорий файлов.

0 голосов
/ 26 сентября 2011

У меня обычно другой подход, и я считаю, что ВСЕ библиотеки, используемые на веб-сайте, должны указываться на каждой странице . Это делает первую загрузку немного медленнее, но затем загрузка всех последующих страниц происходит быстрее, так как он использует кеш браузера.

Чтобы улучшить его еще лучше, вы можете сделать все свои библиотеки доступными только в одном файле.

Я использовал SquishIt для этого в какой-то момент. Я неплохо интегрируюсь в ASP.NET MVC.

...