在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