2009-10-10 68 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 %> 
相关问题