2013-04-22 18 views
5

Chcę utworzyć otoki wokół tego istniejącego pomocnika:Jak utworzyć pomocnika opakowania wokół funkcji pomocnika Url.Content?

@Content.Url("...") 

Jak mogę utworzyć pomocnika zawinąć to i dodać parametr do niego?

moim kontroler ma właściwość:

public bool IsAdmin {get; set;} 

chcę jakoś odwołać tę wartość z mojego kontrolera i używać go jak:

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

Jak mogę to zrobić? Czy jedynym sposobem dodania IsAdmin do mojego ViewModel?

Odpowiedz

2

Możesz dodać do swojego modelu IsAdmin lub uczynić go statyczną własnością przechowującą wartość w HttpContext.Current.Items. Alternatywnie może odczytać wartość dynamicznie z HttpContext.Request.

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

Można utworzyć niestandardową metodę rozszerzenia jak ten

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

helper.Content jest taka sama jak @ Content.Url ?? – loyalflow

+0

Tak, 'helper.Url' będzie wywoływał oryginalną implementację' @ Content.Url'. –

+0

, więc jeśli zrobię IsAdmin statyczny na moim kontrolerze, strona widoku będzie miała do niego dostęp? – loyalflow

0

Here jest bardzo dobrym przykładem tego, co szukasz:

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 
} 
Powiązane problemy