2013-04-22 12 views
5

Ich möchte ein Wrapper um diese bestehende Helfer erstellen:Wie erstellt man einen Wrapper-Helper um die Url.Content-Hilfsfunktion?

@Content.Url("...") 

Wie kann ich einen Helfer erstellen diese zu wickeln und einen Parameter, um es hinzuzufügen?

Mein Controller verfügt über eine Eigenschaft:

public bool IsAdmin {get; set;} 

Ich möchte irgendwie von meinem Controller diesen Wert verweisen und es mögen verwenden:

@MyContent.Url("...", IsAdmin) 

Wie kann ich das tun? Ist die einzige Möglichkeit, IsAdmin zu meinem ViewModel hinzuzufügen?

Antwort

2

Sie können entweder IsAdmin zu Ihrem Modell hinzufügen oder es zu einer statischen Eigenschaft machen, die den Wert in HttpContext.Current.Items speichert. Alternativ kann er den Wert dynamisch von lesen.

public static bool IsAdmin 
{ 
    get { return (HttpContext.Current.Items["IsAdmin"] as bool?) ?? false; } 
    set { HttpContext.Current.Items["IsAdmin"] = value; } 
} 

Sie können wie diese

public static Content(this UrlHelper helper, string contentPath, bool isAdmin) 
{ 
    // do something with isAdmin 
    helper.Content(contentPath); 
} 
+0

helper.Content ist die gleiche wie @ Inhalt.Url ?? – loyalflow

+0

Ja, 'helper.Url' würde die ursprüngliche Implementierung von' @ Content.Url' aufrufen. –

+0

Wenn ich also IsAdmin auf meinem Controller statisch mache, kann die Ansichtsseite dann darauf zugreifen? – loyalflow

0

Here eine benutzerdefinierte Erweiterung Methode erstellen ist ein sehr gutes Beispiel dafür, was Sie suchen:

public class UrlHelperEx : UrlHelper 
{ 
    #region Constants 
    private const string c_VERSION_FORMAT = "{0}?v={1}"; 
    #endregion 

    #region Initialization 
    public UrlHelperEx(RequestContext requestContext) 
     : base(requestContext) 
    { 
    } 
    #endregion 

    #region Public methods 
    public string Content(string contentPath,bool forceupdate=false) 
    { 
     var content = base.Content(contentPath); 

     if (!forceupdate) { 
      return content.ToString(); 
     } 
     else 
     { 
      Version version = WebHelper.GetApplicationVersion(this.RequestContext.HttpContext); 
      return string.Format(c_VERSION_FORMAT, content 
        , version.ToString()); 
     } 
    } 
    #endregion 
} 
Verwandte Themen