2013-04-22 31 views
5

Tôi muốn tạo một wrapper xung quanh helper hiện này:Cách tạo trình trợ giúp trình bao bọc xung quanh chức năng trợ giúp Url.Content?

@Content.Url("...") 

Làm thế nào tôi có thể tạo ra một helper để bọc này và thêm một tham số cho nó?

My điều khiển có một tài sản:

public bool IsAdmin {get; set;} 

Tôi muốn bằng cách nào đó tham khảo giá trị này từ bộ điều khiển của tôi và sử dụng nó như:

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

Làm thế nào tôi có thể làm điều này? Cách duy nhất để thêm IsAdmin vào số ViewModel của tôi?

Trả lời

2

Bạn có thể thêm IsAdmin vào mô hình của mình hoặc biến nó thành thuộc tính tĩnh lưu trữ giá trị trong HttpContext.Current.Items. Ngoài ra, nó có thể đọc giá trị động từ HttpContext.Request.

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

Bạn có thể tạo một phương pháp mở rộng thông thường như thế này

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

helper.Content cũng giống như @ Content.Url ?? – loyalflow

+0

có, 'helper.Url' sẽ gọi triển khai ban đầu của' @ Content.Url'. –

+0

vì vậy nếu tôi làm IsAdmin tĩnh trên bộ điều khiển của tôi, trang xem có thể truy cập nó sau đó? – loyalflow

0

Here là một ví dụ rất tốt về những gì bạn đang tìm kiếm:

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 
} 
Các vấn đề liên quan