2011-02-25 60 views
1

我的問題:我有一個MVC3應用程序,其中所有視圖都使用一個公共母版頁。母版頁有很多鏈接到其他(內部)網站。我需要能夠根據部署環境(例如staging.blah.com,www.blah.com,dev.blah.com等)更改這些鏈接的域。該域存儲在web.config中。在asp.net mvc主頁中使用配置設置的首選方法

有很多方法可以做到這一點,但我正在尋找某種關於首選方法的共識。這裏有一些選項,但我願意接受任何建議:

(1)直接從主頁面引用appsettings。這是最簡單和最常見的方法,但我並不特別熱衷於閱讀web.config並在整個主頁面代碼中連接url。實際上,我不確定我喜歡訪問web.config的視圖。 (2)使用讀取配置的自定義操作過濾器將appsetting值粘貼在viewdata/viewbag中。像以前一樣在頁面中連接。 (3)作爲(2),但是通過構造器注入來注入appsetting值,而不是在過濾器中讀取它。

(4)爲所有強類型視圖模型創建一個基類,並使用自定義操作過濾器填充appsetting。

(5)創建一個htmlhelper,它接受路徑並在內部讀取appsetting和並置。 (6)創建一個自定義的視圖基類,注入appsetting的值並使其成爲可用作路徑和連接的屬性或函數。

只是爲了補充一點,即通常當母版頁需要數據時,我喜歡使用Html.Action,但是在整個母版頁中使用這些URL的情況下這是不可能的。

想法?

+0

TFG - 是鏈接「總是」相對的,也就是你永遠不指向的鏈接dev.blah.com和staging.blah.com在同一時間的組合? - 另外,你能解釋一下爲什麼html。行動是不可能與這些網址(爲了我自己的利益:) –

+0

他們總是dev/staging/www,從來沒有混合物,並給予整個頁面的鏈接位置,我需要有大量的html.actions。由於html動作實際上是一個單獨的請求,所以這不會有效。 –

回答

2

(5)創建一個htmlhelper,它接受路徑並在內部讀取appsetting和並置。

我會去這個。您的自定義HTML幫助可能是這個樣子:

<%= Html.ExternalActionLink(
    "link text", 
    new { path = "/foo/bar.php" } 
    new { param1 = "value1", param2 = "value2" } 
) %> 

,並可能發出下面的HTML:

<a href="http://dev.blah.com/foo/bar.php?param1=value1&param2=value2">link text</a> 
0

我過去所做的是在我的母版頁中使用viewdata/viewbag,並在我的基本控制器中填充它的值。基礎控制器又調用另一個類來完成從web.config讀取值的工作。

通過這種方式,視圖非常乾淨(例如,它不包含讀取appsettings的代碼),而且我不需要創建與使用master的所有視圖匹配的基本視圖模型。

這種方法的缺點是使用viewdata/viewbag,但我認爲這對我來說確實很好,而且非常容易實現。

相關問題