Asp.net mvc 如何使if依赖于HtmlHelper使用

Asp.net mvc 如何使if依赖于HtmlHelper使用,asp.net-mvc,asp.net-mvc-2,extension-methods,html-helper,Asp.net Mvc,Asp.net Mvc 2,Extension Methods,Html Helper,Im使用asp.NETMVC2.0。我有以下HtmlHelper扩展名: AdminOnly(HtmlHelper helper, IPrincipal User, string htmlToRender) { //Render Html if have admin access. } 我需要对其进行修改,以便以以下方式使用: AdminOnly(用户).TextBoxFor(x=>x.MyField) 这样,只有当用户具有管理员访问权限时,它才能呈现MyField的编辑字段 目前,我

Im使用asp.NETMVC2.0。我有以下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)%>
x.MyProperty).AdminOnly(用户)%%>
它可以工作,但我希望能够添加更多的输入或更灵活地在输入前后添加文本,如下所示:

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

x.Age)%>
1)如果您不希望为当前标识以外的对象呈现内容,并且使用的是
线程.CurrentPrincipal
,我建议省略
用户
参数,使用
HttpContext.current.user
线程.CurrentPrincipal

2) 使用链式方法调用可能需要相当多的工作,相反,我建议使用lambda表达式

分机:

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

    return MvcHtmlString.Empty;
}
public static MvcHtmlString AdminOnly(此HtmlHelper HtmlHelper,Func操作)
{
if(HttpContext.Current.User.IsInRole(“admin”))
返回动作();
返回MvcHtmlString.Empty;
}
用法:

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

编辑:为MVC2更新

谢谢,卢卡什!将尝试移植到MVC2并在此处发布。无论如何,我的祝福是给你的:-)
<%: Html.AdminOnly(() => Html.TextBoxFor(m => m.Field)) %>