2011-05-26 17 views
0

即時通訊使用asp.net mvc 2.0。我有以下的HtmlHelper擴展:如何使依賴HtmlHelper使用

AdminOnly(HtmlHelper helper, IPrincipal User, string htmlToRender) 
{ 
    //Render Html if have admin access. 
} 

我需要修改它以這樣的方式來使用: AdminOnly(用戶).TextBoxFor(X => x.MyField) 因此,它可能使編輯領域只有用戶具有管理員訪問權時才能使用MyField


現在香港專業教育學院推出了以下解決方案:

AdminOnly(this MvcHtmlString resString, IPrincipal User) 
{ 
    //Render Html if have admin access. 
} 

所以在代碼中,我可以寫的東西,如:

<%:Html.TextBoxFor(x=>x.MyProperty).AdminOnly(User)%> 

它的工作原理,但我希望能夠添加更多輸入或更靈活地在輸入之前和之後添加文本,如下所示:

<%:Html.PlainText("Set your age: ").TextBoxFor(x=>x.Age).AdminOnly(User)%> 

<%: Html.AdminOnly("Set your age: ", User).AddTextBoxFor(x=>x.Age)%> 

回答

1

1)如果您不希望渲染工具和其他比目前的身份和你正在使用Thread.CurrentPrincipal我建議留出user參數和使用HttpContext.Current.UserThread.CurrentPrincipal

2)使用鏈式方法調用可能需要相當多的工作,而我建議利用lambda表達式。

擴展:

public static MvcHtmlString AdminOnly(this HtmlHelper htmlHelper, Func<MvcHtmlString> action) 
{ 
    if (HttpContext.Current.User.IsInRole("admin")) 
     return action(); 

    return MvcHtmlString.Empty; 
} 

用法:

<%: Html.AdminOnly(() => Html.TextBoxFor(m => m.Field)) %> 

編輯:更新的MVC 2個

+0

謝謝,盧卡斯!將嘗試移植到MVC 2並張貼在這裏。無論如何,我的投票是給你的:-) – 2011-05-26 10:58:08

+0

工作對我來說很好,謝謝! – 2011-05-26 11:20:42