2014-02-11 27 views
10

Ich habe ein JavaScript-Paket, das ich nur beim Testen einbeziehen möchte, nicht wenn der Code in der Produktion bereitgestellt wird.Wie füge ich ein Skriptpaket bedingt hinzu?

Ich habe eine Eigenschaft namens IsEnabledTestingFeatures hinzugefügt. In der Datei BundleConfig.cs greife ich darauf wie folgt auf:

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

Dies funktioniert ordnungsgemäß.

Nun möchte ich nur das Bündel in meiner Seite, wenn diese Eigenschaft auf True festgelegt ist.

Ich habe folgendes versucht, aber der Compiler beschwert sich, dass es nicht die Default Namespace finden Sie unter:

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

Ich habe versucht, zu finden, wie man die Scripts.Render Funktionalität von Controller für den Zugriff selbst, sondern waren nicht erfolgreich.

Ich bevorzuge es, das Bündel in der Ansicht selbst hinzuzufügen, aber begnüge mich damit, es über den Controller hinzuzufügen.

Antwort

4

Bis hoffentlich eine alternative [read: better] Lösung vorgeschlagen wird, habe ich sie mit ViewBag implementiert.

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")); 
} 

-Controller

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

Ansicht

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

Einige Hinweise:

  1. Das hat ich nicht in dem Ansichtsmodell über eine Eigenschaft implementieren aufgrund dieses Eigenschaft/Merkmal unabhängig von den angezeigten Daten, die zu sein. Es schien falsch, diese Bedingung mit einzelnen Daten -Modellen zu verknüpfen, da es sich um eine standortweite Funktion handelt.

  2. Ich habe Einstellungen auf Anwendungsebene verwendet, da es einfacher ist, diese Eigenschaft pro Umgebung zu konfigurieren, da wir Web-Transformationen verwenden. Daher kann jede Umgebung diese Eigenschaft nach Bedarf festlegen.

8

Die ViewBag sollte nicht nötig sein ...

Mit appSettings von web.config Sie müssen für den Test nicht neu übersetzen und setzt leicht.

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

Anzeigen oder Layout-

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

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

Und ich würde "~/bundles/testing" in BundleConfig unabhängig von der Testbedingung definieren, wenn Sie diese mit anderen Skripten bündeln wollen.

Wenn Sie Properties.Default.IsEnabledTestingFeatures von AppSettings dann die Wurzel des Problems zugeordnet ist, wie Sie Ihre Eigenschaften implementiert.

+0

wünschte, ich könnte up-Abstimmung mehr als einmal! Dies sollte definitiv die akzeptierte Antwort sein. (MEINER BESCHEIDENEN MEINUNG NACH) –

Verwandte Themen