2013-04-22 9 views
5

Voglio creare un wrapper per questo helper esistente:Come creare un helper wrapper attorno all'URL. Funzione helper del contenuto?

@Content.Url("...") 

Come si crea un aiutante per avvolgere questo e aggiungere un parametro ad esso?

mio controller ha una proprietà:

public bool IsAdmin {get; set;} 

voglio fare riferimento in qualche modo questo valore dal mio controller e usarlo come:

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

Come posso fare questo? È l'unico modo per aggiungere IsAdmin al mio ViewModel?

risposta

2

È possibile aggiungere IsAdmin al modello o renderlo una proprietà statica che memorizza il valore in HttpContext.Current.Items. In alternativa, può leggere il valore in modo dinamico da HttpContext.Request.

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

È possibile creare un metodo di estensione personalizzato come questo

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

helper.Content è lo stesso @ Content.Url ?? – loyalflow

+0

sì, 'helper.Url' sta invocando l'implementazione originale di' @ Content.Url'. –

+0

quindi se faccio IsAdmin static sul mio controller, la pagina di visualizzazione può accedervi allora? – loyalflow

0

Here è un ottimo esempio di ciò che si sta cercando:

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 
} 
Problemi correlati