2013-04-22 80 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 
}