3 Stimmen

Verwendung von <%$ %> in ASP.NET MVC

In ASP.NET WebForms können Sie mit dieser Syntax direkt in Ihrem Markup auf appSettings verweisen:

<%$ MySettingKey %>

Leider funktioniert dies nicht in ASP.NET MVC, weil, wie MSDN darauf hinweist, diese Syntax nur in Server-Steuerelementen funktioniert.

Ich habe in ein paar Situationen, wo ich würde lieben, diese syntaktische Zucker in einer ASP.NET MVC-Ansicht (WebFormsViewEngine) zu verwenden laufen. Weiß jemand, ob es eine Möglichkeit gibt, dies zu tun?

Scheint, wie wir in der Lage sein könnte, von WebFormsViewEngine ableiten und fügen Sie diese als ein Feature, vielleicht?

7voto

Darin Dimitrov Punkte 990883

Nicht sehr sauber, aber in einer ASP.NET MVC-Ansicht könnte man dies tatsächlich schreiben:

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

Das bedeutet, dass der Wert, den Sie in appSettings haben, gedruckt wird:

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

Oh, und es wird kein VIEWSTATE-Tag zu Ihrer Seite hinzugefügt :-)

Nun zu dem Punkt: Ich werde stark entmutigen Sie tun so etwas wie dieses MVC. Es ist nicht die Ansicht der Verantwortung, die Daten zu ziehen, um zu zeigen, es ist der Controller, der es übergeben muss. Also würde ich MySetting zu einer Eigenschaft des ViewModel machen, die vom Controller befüllt und an den View übergeben wird, um angezeigt zu werden.

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

Und in der Ansicht:

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

oder noch kürzer mit dem neue Syntax eingeführt in ASP.NET 4:

<%: Model.MySetting %>

UPDATE

Noch eine Alternative, wenn Sie denken, dass MySetting keine Eigenschaft des ViewModel ist (wie einige css-Namen oder ähnliches) könnten Sie den HtmlHelper erweitern:

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

Und verwenden Sie es so:

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

0voto

Alex Chen Punkte 605

Meiner Erinnerung nach verweist der <%$ %>-Tag auf Globalisierungsressourcen, oder irre ich mich?

0voto

Egor Pavlikhin Punkte 16795

Es funktioniert immer noch mit Server-Steuerelementen in MVC, so dass niemand Sie davon abhält, ein einfaches Steuerelement zu schreiben, das nur den Schlüssel ausgibt.

0voto

Dan Atkinson Punkte 11038

Ich bevorzuge so etwas wie eine ApplicationFacade. Dies ist etwas, das ich von Mark Dickinson als wir zusammenarbeiteten.

Die Prämisse ist dem, was Darin vorschlägt, sehr ähnlich, nur dass sie stark typisiert ist...

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];
  }
}

Dann würden Sie es Ihrer Ansicht nach so nennen:

<%= ApplicationFacade.MySetting %>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X