2009-10-10 65 views
3

在ASP.NET的WebForms您可以直接在您的標記中引用的appSettings這個語法:

<%$ MySettingKey %> 

可惜這並不在ASP.NET MVC工作,因爲,正如MSDN指出,該語法僅適用於服務器控件。

我遇到了一些情況,我很想在ASP.NET MVC視圖(WebFormsViewEngine)中使用這種語法糖。有誰知道是否有辦法讓這個工作?

好像我們可能能夠從WebFormsViewEngine派生並添加此功能,也許?

+0

+1''<%$ %>是新的我! – TheVillageIdiot 2009-10-10 07:41:42

回答

7

不是很乾淨,但在ASP.NET MVC查看你實際上可以這樣寫:

<asp:Literal ID="dummy" runat="server" Text="<%$appSettings:MySettingKey%>" /> 

這將有效打印無論你在的appSettings具有值:

<appSettings> 
    <add key="MySettingKey" value="SOME VALUE"/> 
</appSettings> 

哦,有將不會添加到您的頁面的VIEWSTATE標記:-)

現在,我會強烈地勸阻你做這樣的MVC。 View不負責將數據展示出來,它是需要通過它的控制器。所以我會讓MySetting成爲ViewModel的一個屬性,它將被控制器填充並傳遞給視圖來顯示。

public ActionResult Index() 
{ 
    var model = new SomeViewModel 
    { 
     // TODO: Might consider some repository here 
     MySetting = ConfigurationManager.AppSettings["MySetting"] 
    } 
    return View(model); 
} 

並在視圖:

<%= Html.Encode(Model.MySetting) %> 

甚至與new syntax在ASP.NET 4引入了更短:

<%: Model.MySetting %> 

UPDATE:

另一個如果你認爲MySe是另一種選擇擬合不是(或類似像一些CSS的名字),你可以擴展的HtmlHelper視圖模型的屬性:

public static string ConfigValue(this HtmlHelper htmlHelper, string key) 
{ 
    return ConfigurationManager.AppSettings[key]; 
} 

而且使用這樣的:

<%= Html.Encode(Html.ConfigValue("MySetting")) %> 
+0

好點達林。我可能會懷疑一個ViewModelBase,它可以很容易地暴露這些項目......但是你的權利,我不應該這樣做。 – nikmd23 2009-10-10 09:32:07

+0

我用另一種替代方法更新了我的答案,以擴展HtmlHelper,這可能更適合您的場景。 – 2009-10-10 09:46:04

0

在我的記憶中,<%$%>標籤引用globalzation資源,我錯了嗎?

0

它仍然與服務器控件工作在MVC ,所以沒有人阻止你寫一個簡單的控件,它只會打印出鍵。

0

我更喜歡使用ApplicationFacade。當我們一起工作時,這是我從Mark Dickinson中挑選出來的東西。

這個前提與Darin提出的非常相似,除非它是強類型的...

public static class ApplicationFacade 
{ 
    public static string MySetting 
    { 
    get 
    { 
     return ConfigValue("MySetting"); 
    } 
    } 

    //A bool! 
    public static bool IsWebsiteLive 
    { 
    get 
    { 
     return (bool)ConfigValue("IsWebsiteLive"); 
    } 
    } 

    private static string ConfigValue(string key) 
    { 
    return ConfigurationManager.AppSettings[key]; 
    } 
} 

那麼你會因此把它在你的觀點:

<%= ApplicationFacade.MySetting %> 
相關問題