2014-02-11 51 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功能,但並不成功。

我寧願在視圖本身中添加捆綁包,但會決定通過Controller添加捆綁包。

回答

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. 我沒有通過在視圖模型屬性實現這個由於這種 屬性/功能是獨立所顯示的數據。它 似乎是不正確的,因爲這是一個站點範圍的功能,因此將此情況與單個數據 關聯。

  2. 我使用了應用程序級別的設置,因爲我們使用Web轉換的事實會更容易在每個環境的基礎上配置此屬性。因此,每個環境都可以根據需要設置此屬性。

8

ViewBag不應該是必要的...

web.config中使用appSettings你不需要重新編譯和測試很容易部署。

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

查看或佈局

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

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

除非你想與其他腳本捆綁這個我會在BundleConfig定義"~/bundles/testing"無論試驗條件。

如果您從AppSettings中指定Properties.Default.IsEnabledTestingFeatures,則問題的根源在於您如何實現屬性。

+0

希望我可以多次投票!這絕對應該是被接受的答案。 (恕我直言) –