Как добавить условный пакет script?
У меня есть пакет 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
от самого контроллера, но не увенчался успехом.
Я предпочитаю добавлять пакет в самом представлении, но соглашусь добавить его через контроллер.
Ответы
Ответ 1
До тех пор, пока не будет предложено альтернативное решение [читать: лучше], я реализовал его с помощью 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")
}
Некоторые примечания:
-
Я не реализовал это через свойство в ViewModel из-за этого
свойство/функция не зависит от отображаемых данных. Это
казалось неправильным связать это условие с отдельными данными
модели, поскольку это общесистемная функция.
-
Я использовал настройки уровня приложения, потому что будет проще настроить это свойство на основе среды для каждого из-за того, что мы используем веб-преобразования. Таким образом, каждая среда может установить это свойство по мере необходимости.
Ответ 2
ViewBag
не нужно...
Используя appSettings
из web.config, вам не нужно перекомпилировать для тестирования и легко развертывать.
<appSettings>
<add key="TestingEnabled" value="true" />
</appSettings>
Просмотр или макет
@{
bool testing = Convert.ToBoolean(
System.Configuration.ConfigurationManager.AppSettings["TestingEnabled"]);
}
@if (testing) {
@Scripts.Render("~/bundles/testing")
}
И я бы определил "~/bundles/testing"
в BundleConfig
независимо от условия тестирования, если вы не хотите связать это с другими скриптами.
Если вы назначили Properties.Default.IsEnabledTestingFeatures
из AppSettings, то корень вашей проблемы заключается в том, как вы реализовали свои Свойства.