C# asp.net mvc中母版页的部分有条件渲染
您好,我在asp.net mvc web应用程序的母版页上定义了以下菜单C# asp.net mvc中母版页的部分有条件渲染,c#,asp.net-mvc,master-pages,renderpartial,C#,Asp.net Mvc,Master Pages,Renderpartial,您好,我在asp.net mvc web应用程序的母版页上定义了以下菜单 <%Html.RenderPartial("AdminMenu"); %> <%Html.RenderPartial("ApproverMenu"); %> <%Html.RenderPartial("EditorMenu"); %> 但是,我只想根据登录用户角色显示右菜单。我如何做到这一点 我开始认为我的策略是错误的,那么有没有更好的方法来实现同样的目标呢?举个简单的例子,你可以
<%Html.RenderPartial("AdminMenu"); %>
<%Html.RenderPartial("ApproverMenu"); %>
<%Html.RenderPartial("EditorMenu"); %>
但是,我只想根据登录用户角色显示右菜单。我如何做到这一点
我开始认为我的策略是错误的,那么有没有更好的方法来实现同样的目标呢?举个简单的例子,你可以这样做:
<%
if (User.IsInRole("AdminRole")
Html.RenderPartial("AdminMenu");
else if (User.IsInRole("Approver")
Html.RenderPartial("ApproverMenu");
else if (User.IsInRole("Editor")
Html.RenderPartial("EditorMenu");
%>
扩展方法是这里的发展方向。与@Joseph的
renderpartialivinrole
相比,您可以使用条件renderpartial
方法:
<%
Html.ConditionalRenderPartial("AdminMenu", HttpContext.Current.User.IsInRole("AdminRole"));
Html.ConditionalRenderPartial("ApproverMenu", HttpContext.Current.User.IsInRole("ApproverRole"));
Html.ConditionalRenderPartial("EditorMenu", HttpContext.Current.User.IsInRole("EditorRole"));
%>
是的,我希望有更优雅一点的东西!但我同意这是一个解决办法。@Rippo是的,我理解。实际上,您可以尝试一种扩展方法。我将给出一个例子。ConditionalRenderPartial是mvc v2方法吗?@Rippo否,我提供了下面的实现,但我忘记了从
RenderPartialIfInRole
重命名它,这让人困惑。现在修好了。
<%
Html.RenderPartialIfInRole("AdminMenu", "AdminRole");
Html.RenderPartialIfInRole("ApproverMenu", "Approver");
Html.RenderPartialIfInRole("EditorMenu", "Editor");
%>
public static void RenderPartialIfInRole
(this HtmlHelper html, string control, string role)
{
if (HttpContext.Current.User.IsInRole(role)
html.RenderPartial(control);
}
<%
Html.ConditionalRenderPartial("AdminMenu", HttpContext.Current.User.IsInRole("AdminRole"));
Html.ConditionalRenderPartial("ApproverMenu", HttpContext.Current.User.IsInRole("ApproverRole"));
Html.ConditionalRenderPartial("EditorMenu", HttpContext.Current.User.IsInRole("EditorRole"));
%>
public static void ConditionalRenderPartial
(this HtmlHelper html, string control, bool cond)
{
if (cond)
html.RenderPartial(control);
}