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

标签 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 文件中。

最佳答案

这看起来不错。有些人(比如我)可能更愿意更进一步,并将此检查包装在自定义 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");}

然后您将有一个相应的 Controller 操作,该操作检查用户是否处于所需角色并使用标记呈现局部 View 。

关于c# MVC 有条件地隐藏标题按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14328092/

相关文章:

c# - ASP.NET MVC 3 : Multiple Html. RenderAction() 问题

Javascript var 作为 Razor 参数

c# - 为什么我无法输出AJAX POST发送的变量?

c# - 错误 : String or binary data would be truncated. 语句已终止。 ASPX

asp.net-mvc - 在 asp.net mvc url 中格式化查询字符串的最佳方法?

c# - 在 Linux 中运行 .NET exe

asp.net-mvc - ASP.NET MVC - 设置 cookie 在 Chrome 中不起作用

asp.net-mvc - ASP.NET MVC Razor 条件渲染元素

C# 将字符串编码结构发送至 C 库

c# - VB 和 C# do-while 的运行顺序有区别吗