如何解决如何确定是否依赖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更新
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。