2015-10-30 3 views
5

Хотя связка - это опрятная функция VS, иногда я хочу, чтобы сценарий или css были доступны для определенной страницы. Таким образом, я могу убедиться, что конфликты имен и/или переопределения будут устранены.Можно ли связывать скрипты и стили на странице

Возможно ли связывать файлы, чтобы доступны только глобальные и специальные файлы?

Так, например, скажем, у меня есть страница под названием Cabinet.cshtml. И у меня также есть Cabinet.js и Cabinet.css файлов. С другой стороны, у меня есть другая страница под названием AdminPanle.cshtml с файлами admin.js и admin.css.

Теперь я хотел бы, чтобы эти два представления имели доступ только к их соответствующим файлам, а также jQuery и jQuery ui. Поэтому jQuery должен быть глобальным.

+1

Вы всегда можете создавать свои собственные пакеты - 'новый ScriptBundle (" ~/bundles/cabinet ")' и т. д., которые включают 'jquery',' jquery-ui' и 'cabinet' и включают' @ Scripts.Render («~/bundles/cabinet») 'на ваш взгляд. Или просто создайте пакет только с «кабинетом» и у вас есть основной комплект в вашем макете и конкретный пакет на вашей странице. –

+0

О, это здорово. Наличие '@ Scripts.Render (" ~/bundles/cabinet ")' только в файле Cabinet.cshtml решит проблему. Спасибо, Стивен. –

ответ

12

Так в чем проблема? По умолчанию в BundleConfig.cs у вас есть:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
        "~/Scripts/jquery-{version}.js")); 

bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
        "~/Scripts/jquery-ui-{version}.js")); 

Так положил эти пакеты в голове вашего _Layout.cshtml:

@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/bundles/jqueryui") 

и создать 4 других жгутов:

//scripts 
bundles.Add(new ScriptBundle("~/bundles/cabinet").Include(
        "~/Scripts/Cabinet.js")); 
bundles.Add(new ScriptBundle("~/bundles/admin").Include(
        "~/Scripts/admin.js")); 
//styles 
bundles.Add(new StyleBundle("~/Content/cabinet").Include("~/Content/Cabinet.css")); 
bundles.Add(new StyleBundle("~/Content/admin").Include("~/Content/admin.css")); 

Теперь вы можете отделить те сценарии и стили и добавьте их только на нужную вам страницу.

Кроме того, я полагаю, что хорошо определить 2 секции в вашем _Layout.cshtml в теге head.

<head> 
    //other scripts and styles here 
    @RenderSection("scriptslib", required: false) 
    @RenderSection("csslib", required: false) 
</head> 

Так что теперь в Фототуров (Cabinet.cshtml и AdminPanle.cshtml), вы можете разместить свои LIBS, где они предполагают, чтобы быть похожим на это:

@section scriptslib{ 
    @Scripts.Render("~/bundles/cabinet") 
    } 
+0

Что мне не хватало, я забыл, что я мог бы визуализировать их отдельно на конкретных страницах. –

+0

Я также полностью забыл о RenderSection! лол – zerohero