asp.net mvc-如何使用依赖于if的HtmlHelper



Im使用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呈现编辑字段。


目前,我提出了以下解决方案:

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.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)) %>

edit:更新为mvc 2

相关内容

  • 没有找到相关文章

最新更新