c#MVC有条件地隐藏标题按钮

时间:2013-01-14 22:38:59

标签: c# asp.net-mvc razor

在我的_Layout.cshtml我有以下代码,如果用户的角色为UserType1

,则不会显示按钮
     @if (!(HttpContext.Current.User.IsInRole("UserType1")))
     { 
       <li><a href="../St/Index">Static</a> </li>
       <li><a href="../St/Clients">Clients</a> </li>
     }

我想知道是否有更好或最好的练习方法。请注意,我将此代码放在我的_Layout.cshtml文件中。

1 个答案:

答案 0 :(得分:3)

这似乎很好。有些人(比如我)可能更愿意更进一步,并将此检查包装在自定义HTML帮助程序中,以便能够对条件进行单元测试:

@if (Html.ShouldShowButtons())
{ 
    <li><a href="../St/Index">Static</a> </li>
    <li><a href="../St/Clients">Clients</a> </li>
}

和帮助程序的实现:

public static class HtmlExtensions
{
    public static bool ShouldShowButtons(this HtmlHelper html)
    {
        return html.ViewContext.HttpContext.User.IsInRole("UserType1");
    }
}

作为替代方案,您可以使用子操作实现更复杂的逻辑:

@{Html.RenderAction("MenuButtons", "Menu");}

然后,您将拥有相应的控制器操作,该操作将检查用户是否处于所需角色并使用标记呈现部分视图。