在ASP.NET的WebForms您可以直接在您的標記中引用的appSettings這個語法:
<%$ MySettingKey %>
可惜這並不在ASP.NET MVC工作,因爲,正如MSDN指出,該語法僅適用於服務器控件。
我遇到了一些情況,我很想在ASP.NET MVC視圖(WebFormsViewEngine)中使用這種語法糖。有誰知道是否有辦法讓這個工作?
好像我們可能能夠從WebFormsViewEngine派生並添加此功能,也許?
在ASP.NET的WebForms您可以直接在您的標記中引用的appSettings這個語法:
<%$ MySettingKey %>
可惜這並不在ASP.NET MVC工作,因爲,正如MSDN指出,該語法僅適用於服務器控件。
我遇到了一些情況,我很想在ASP.NET MVC視圖(WebFormsViewEngine)中使用這種語法糖。有誰知道是否有辦法讓這個工作?
好像我們可能能夠從WebFormsViewEngine派生並添加此功能,也許?
不是很乾淨,但在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")) %>
好點達林。我可能會懷疑一個ViewModelBase,它可以很容易地暴露這些項目......但是你的權利,我不應該這樣做。 – nikmd23 2009-10-10 09:32:07
我用另一種替代方法更新了我的答案,以擴展HtmlHelper,這可能更適合您的場景。 – 2009-10-10 09:46:04
在我的記憶中,<%$%>標籤引用globalzation資源,我錯了嗎?
它仍然與服務器控件工作在MVC ,所以沒有人阻止你寫一個簡單的控件,它只會打印出鍵。
我更喜歡使用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 %>
+1''<%$ %>是新的我! – TheVillageIdiot 2009-10-10 07:41:42