Использование <% $%> в ASP.NET MVC - PullRequest
3 голосов
/ 10 октября 2009

В ASP.NET WebForms вы можете ссылаться на appSettings прямо в вашей разметке с помощью следующего синтаксиса:

<%$ MySettingKey %>

К сожалению, это не работает в ASP.NET MVC, поскольку, как указывает MSDN, этот синтаксис работает только в серверных элементах управления.

Я столкнулся с несколькими ситуациями, когда мне хотелось бы использовать этот синтаксический сахар в представлении ASP.NET MVC (WebFormsViewEngine). Кто-нибудь знает, есть ли способ заставить это работать?

Похоже, что мы можем извлечь из WebFormsViewEngine и добавить это как функцию, возможно?

Ответы [ 4 ]

7 голосов
/ 10 октября 2009

Не очень чисто, но в 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 не несет ответственности за получение данных для показа, это контроллер, который должен их передать. Поэтому я бы сделал 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) %>

или даже короче с новым синтаксисом , представленным в ASP.NET 4:

<%: Model.MySetting %>

UPDATE:

Еще одна альтернатива, если вы считаете, что MySetting не является свойством ViewModel (например, имя CSS или подобное), вы можете расширить HtmlHelper:

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

И используйте это так:

<%= Html.Encode(Html.ConfigValue("MySetting")) %>
0 голосов
/ 10 октября 2009

Я предпочитаю иметь что-то вроде ApplicationFacade. Это то, что я взял из Марка Дикинсона , когда мы работали вместе.

Предпосылка очень похожа на то, что предлагает Дарин, за исключением того, что она строго типизирована ...

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 %>
0 голосов
/ 10 октября 2009

Он по-прежнему работает с серверными элементами управления в MVC, поэтому никто не мешает вам написать простой элемент управления, который просто распечатает ключ.

0 голосов
/ 10 октября 2009

В моей памяти, тег <% $%> ссылки на ресурсы глобализации, я не прав?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...