2017-04-04 87 views
0

我想將一個css名稱加載到會話變量中,然後讓它在_Layout.cshtml上加載一個css。在控制器中添加css

這就是我試圖做:

var companycss = string.Format("~/Content/CompanyFiles/{0}/{0}.css", MySession.CssName); 

    bundles.Add(new StyleBundle("~/Content/css").Include(
    "~/Content/bootstrap.css", 
    "~/Content/site.css", 
    "~/Content/justified-nav.css", 
    "~/Content/Styles.css", 
    companycss)); // <-- Custom CSS file 

的BundleConfig.cs顯然我的索引方法之前在我的HomeController所以它沒有加載這個樣式表加載。

在我的索引方法中,我加載了MySession.CssName,並希望它能正確加載到頁面中,因爲我決定在客戶訪問該網站時加載哪個css。

有關如何完成此任務的任何建議?

謝謝!

回答

0

除非您爲每家公司創建一個靜態綁定,否則在這裏實現您想要的功能幾乎是不可能的。換句話說,你不能依賴於BundleConfig.cs中的會話,但你可以通過通過會話變量在你的佈局中引用一個不同的包。該捆綁包必須已經被定義。

或者,如果您不介意加載兩個捆綁包,則可以在視圖中動態創建捆綁包。你基本上只是讓你的~/Content/css捆綁包包括除公司CSS文件以外的所有CSS。然後,你可以這樣做:

@{ BundleTable.Bundles.Add(new StyleBundle(String.Format("~/bundles/{0}", MySession.CssName)).Include(String.Format("~/Content/CompanyFiles/{0}/{0}.css", MySession.CssName))); } 
@Styles.Render(String.Format("~/bundles/{0}", MySession.CssName)) 

這將添加一個新的軟件包爲這一特定公司的CSS,然後加載它。你最終會加載兩個樣式表,而不是一個,但它們都會被縮小。

編輯

我以前從來沒有考慮過這個,但你也許可以將代碼從您的BundleConfig.cs與後者的選擇結合起來,實現了單束。但是,您基本上將代碼從BundleConfig.cs中移出並放入您的佈局中。有些人可能認爲這是一種失禮,它確實踐踏了MVC模式的原則。儘管如此,爲完整性:

​​
+0

感謝您的意見,但我回來刪除這個。我以另一種方式。我將它添加到'@ Styles.Render(「〜/ Content/css」)下面的'_layout.cshtml'中,這看起來可行。 – ErocM

+0

是的。關鍵在於,您需要將會話變量放在一些實際可用的地方,即* not * BundleConfig.cs。 –