2009-05-07 20 views
2

Ich versuche, ein globales Menü in meinem ASP.NET MVC-site.master zu erstellen, und ich frage mich, wie ich auf die Application Settings-Eigenschaft von Site.master zugreifen konnte Markup? Zuvor hätte ich wahrscheinlich ein Config-Objekt aus meinem Code-Behind von site.master instanziiert und dann eine öffentliche Eigenschaft festgelegt. Aber jetzt kratze ich am Kopf ... muss mehr Kaffee brauchen.Zugriff auf Anwendungseinstellungen in ASP.NET MVC-Ansicht

mit Antwortcode auf die Anwendung propererties genannt baseurl Einstellung

Added ein String AKTUALISIERT und gab ihm einen Wert von "http://mysite.com"

eine Modellklasse von GlobalMenu.cs

public class GlobalMenu 
{ 
    private string _baseurl; 
    public string baseurl 
    { 
     get { return _baseurl; } 
     set 
     { 
      _baseurl = value; 
     } 
    } 

} 
Hergestellt

Erstellt eine Basis-Controller-Klasse mit dem Namen BaseController und geerbt von Controller, und Overroad OnActionExecuted soly:

 protected override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     string baseurl = Properties.Settings.Default.baseurl; 

     GlobalMenu menumodel = new GlobalMenu(); 
     menumodel.baseurl = baseurl; 
     ViewData["menudata"] = menumodel; 
     base.OnActionExecuted(filterContext); 
    } 

eine Teilansicht genannt ViewGlobalMenu im freigegebenen Ordner erstellt, die stark an globalmenu eingegeben wurden, der so aussieht ... aber mit mehr Material offensichtlich:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyApp.Web.Models.GlobalMenu>" %> 

schließlich in Site.Master I fügte hinzu, wo ich das Menü anzeigen wollte:

<%Html.RenderPartial("ViewGlobalMenu", (MyApp.Web.Models.GlobalMenu)ViewData["menudata"]); %> 

Antwort

1

Hier ist die Strategie, die ich wahrscheinlich verwenden würde. Erstellen Sie einen Basiscontroller, von dem der Controller Ihres anderen Controllers abgeleitet und vom Controller abgeleitet wird. Überschreiben Sie die ActionExecuted-Methode im Basis-Controller und lassen Sie sie auf die Anwendungseinstellungen zugreifen (und cachen sie wahrscheinlich). Generieren Sie ViewData für Ihr Menü als stark typisierte Menümodellklasse, die einem bestimmten Schlüssel in ViewData zugewiesen ist. Sie müssen das Modell nur für Aktionen bereitstellen, die ein ViewResult (und möglicherweise auch PartialViewResults) zurückgeben.

Erstellen Sie eine stark typisierte Teilansicht, die das globale Menü-Markup mithilfe der Menümodellklasse implementiert. Fügen Sie dies über RenderPartial in die MasterPage-Definition ein. Übergeben Sie das Element ViewData, das dem Schlüssel als das Modell der Teilansicht entspricht, damit Sie die Eigenschaften des Modells in Ihrem Menü verwenden können.

+0

Arbeitete wie ein Kinderspiel ... danke! Hinzufügen meines obigen Beispielcodes – Webjedi

+0

Bis Sie vergessen, alle Ihre Controller vom Basiscontroller abzuleiten. Ich suche derzeit nach einer Lösung, die das Properties-Objekt in einem HttpModule oder HttpHandler liest. – belugabob

+0

@belugabob - deshalb testen wir. – tvanfosson

Verwandte Themen