视图中的角色特定控件

时间:2014-07-23 18:06:55

标签: asp.net asp.net-mvc-5 asp.net-identity

我正在尝试根据用户的角色隐藏控件。我曾经能够做类似

的事情
@if (User.IsInRole("Admin"))
            {Html.ActionLink("RolesAdmin", "Index", "RolesAdmin")}
在视图中

但这似乎不再起作用了。经过大量挖掘后,我发现Identity 2.0根本不使用它。

我还可以直接在View中使用吗?或者我完全错了吗?

2 个答案:

答案 0 :(得分:0)

这种类型的逻辑最好放在控制器内,留下视图进行渲染。

您可以在控制器中使用Html.Action并结合使用ChildActions,并根据用户角色渲染部分视图。

我刚才发布了一个与此类似的问题,认为这会对你有所帮助。

Role Based Navigation

<强> - 编辑 -

为了澄清,这可以使用新的ASP.NET标识

这将进入布局

@Html.Action("BuildNavigation", "Component")

这将是你的控制者。

public class ComponentController : Controller
{

    [ChildActionOnly]
    public ActionResult BuildNavigation()
    {

        if (this.User.IsInRole("customer"))
        {
            return PartialView("_NavigationCustomer");
        }
        else
        { 
            return PartialView("_NavigationBasic"); 
        }


    }
}

这应该让你朝着正确的方向前进。

答案 1 :(得分:0)

这应该仍然可以正常工作,因为身份样本目前正在做类似的事情,只显示&#34;管理员&#34;

的顶级链接
            @if (Request.IsAuthenticated && User.IsInRole("Admin")) {
                <li>@Html.ActionLink("RolesAdmin", "Index", "RolesAdmin")</li>
                <li>@Html.ActionLink("UsersAdmin", "Index", "UsersAdmin")</li>
            }