2013-04-22 72 views
5

我想創建一個圍繞這個現有的幫手包裝:如何在Url.Content輔助函數週圍創建一個包裝輔助器?

@Content.Url("...") 

如何創建一個幫手來包裝這個和參數補充呢?

我的控制器有一個屬性:

public bool IsAdmin {get; set;} 

我想以某種方式從我的控制器參考此值,並使用它像:

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

我怎樣才能做到這一點?將IsAdmin添加到我的ViewModel的唯一方法是?

回答

2

您可以將IsAdmin添加到您的模型或使其成爲一個靜態屬性,將該值存儲在HttpContext.Current.Items中。或者,它可以從HttpContext.Request動態讀取值。

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

您可以創建這樣

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

helper.Content相同@ Content.Url ?? – loyalflow 2013-04-22 19:36:56

+0

是的,'helper.Url'將調用'@ Content.Url'的原始實現。 – 2013-04-22 19:39:29

+0

因此,如果我在控制器上使IsAdmin靜態,那麼視圖頁面可以訪問它嗎? – loyalflow 2013-04-22 19:48:56

0

Here自定義擴展方法是你所尋找的一個很好的例子:

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 
}