2014-02-11 4 views
10

У меня есть пакет javascript, который я хочу включить только при тестировании, а не когда код будет развернут для производства.Как добавить условный пакет скриптов?

Я добавил объект под названием IsEnabledTestingFeatures. В файле BundleConfig.cs я обращаюсь к нему так:

if(Properties.Settings.Default.IsEnabledTestingFeatures) { 
    bundles.Add(new ScriptBundle("~/bundles/testing").Include("~/Scripts/set-date.js")); 
} 

Это работает правильно.

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

Я попытался следующие, но компилятор жалуется, что не может найти Default имен:

@{ 
    if([PROJECT NAMESPACE].Properties.Default.IsEnabledTestingFeatures) 
    { 
     @Scripts.Render("~/bundles/testing") 
    } 
} 

Я пытался найти, как получить доступ к Scripts.Render функциональности от самого контроллера, но не увенчались успехом.

Я предпочитаю добавлять пакет в самом представлении, но соглашусь добавить его через контроллер.

ответ

4

До тех пор, пока не предлагается альтернативное решение [читать: лучше], я реализовал его с помощью ViewBag.

BundleConfig.cs

//if testing features are enabled (eg: "Set Date"), include the necessary scripts 
if(Properties.Settings.Default.IsEnabledTestingFeatures) 
{ 
    bundles.Add(new ScriptBundle("~/bundles/testing").Include(
     "~/Scripts/set-date.js")); 
} 

Контроллер

public ActionResult Index() 
{ 
    ViewBag.IsEnabledTestingFeatures = Properties.Settings.Default.IsEnabledTestingFeatures; 
    return View(); 
} 

Посмотреть

@if (ViewBag.IsEnabledTestingFeatures != null && ViewBag.IsEnabledTestingFeatures) 
{ 
    @Scripts.Render("~/bundles/site") 
} 

Заметки:

  1. Я не выполнил это с помощью свойства в ViewModel из-за этого собственности/функция не зависит от того отображаются данные. Это показалось некорректным, чтобы связать это условие с отдельными данными , поскольку это функция всего сайта.

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

8

ViewBag не должно быть необходимым ...

Использование appSettings из web.config вам не нужно перекомпилировать для тестирования и развертывает легко.

<appSettings> 
    <add key="TestingEnabled" value="true" /> 
</appSettings> 

Просмотр или Layout

@{ 
    bool testing = Convert.ToBoolean(
     System.Configuration.ConfigurationManager.AppSettings["TestingEnabled"]); 
} 

@if (testing) { 
    @Scripts.Render("~/bundles/testing") 
} 

И я бы определил "~/bundles/testing" в BundleConfig независимо от условий тестирования, если вы не хотите, чтобы связать это с другими скриптами.

Если вы назначили Properties.Default.IsEnabledTestingFeatures из AppSettings, тогда корень вашей проблемы заключается в том, как вы реализовали свои Свойства.

+0

Хотелось бы, чтобы я голосовал более одного раза! Это определенно должен быть принятым ответом. (ИМХО) –

Смежные вопросы