asp.net - 在 ASP.NET MVC 中使用 <%$ %>

标签 asp.net asp.net-mvc web-config

在 ASP.NET WebForms 中,您可以使用以下语法直接在标记中引用 appSettings:

<%$ MySettingKey %>

不幸的是,这在 ASP.NET MVC 中不起作用,因为正如 MSDN 指出的那样,此语法仅适用于服务器控件。

我遇到过一些情况,我希望在 ASP.NET MVC View (WebFormsViewEngine) 中使用此语法糖。有谁知道是否有办法让它工作?

似乎我们可以从 WebFormsViewEngine 派生并将其添加为一项功能,也许?

最佳答案

不是很干净,但在 ASP.NET MVC View 中你实际上可以这样写:

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

这将有效地打印您在 appSettings 中拥有的任何值:

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

哦,您的页面中不会添加 VIEWSTATE 标记:-)

现在说重点:我强烈建议您不要做类似 MVC 的事情。拉取数据来显示不是 View 的责任,而是需要传递数据的 Controller 。因此,我将使 MySetting 成为 ViewModel 的一个属性,该属性将由 Controller 填充并传递给要显示的 View 。

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

在 View 中:

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

或更短的 new syntax ASP.NET 4 中引入:

<%: Model.MySetting %>
<小时/>

更新:

如果您认为 MySetting 不是 ViewModel 的属性(如某些 css 名称或类似名称),您可以扩展 HtmlHelper:

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

并像这样使用它:

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

关于asp.net - 在 ASP.NET MVC 中使用 <%$ %>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1547314/

相关文章:

javascript - 使用公司代理服务器的 Web 应用程序性能

c# - CKEditor 在 asp :textbox 上有空值

asp.net - 单元测试 ASP.NET DataAnnotations 验证

asp.net-mvc - 如何在 ASP.NET MVC 中将数据从子操作传递到布局

iis-7 - IIS7 显示 iisstart.html 而不是默认文档

c# - 是否可以在 PostBack C# PCI Compliance 后显示信用卡号

c# - 如何在 ASP.Net 中发布 Web 服务?

c# - 如何在 C# 中递归遍历并记录 HttpRequestMessage 的属性?

asp.net - Web.config 构建与发布转换不起作用

asp.net - 将 session 超时增加到一周或更长时间