在 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/