如何确定是否依赖HtmlHelper用法

问题描述

| 我正在使用asp.net mvc 2.0。我有以下HtmlHelper扩展名:
AdminOnly(HtmlHelper helper,IPrincipal User,string htmlToRender)
{
   //Render Html if have admin access.
}
我需要将其修改为以这种方式使用: AdminOnly(用户).TextBoxFor(x => x.MyField) 这样,只有在用户具有管理员访问权限时,它才可以为MyField呈现编辑字段。 目前,Ive提出了以下解决方案:
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)如果您不希望使用当前身份以外的其他东西来渲染东西,并且您正在使用
Thread.CurrentPrincipal
,建议您省略
user
参数,并使用
HttpContext.Current.User
Thread.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更新     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...