8

我一直在尝试想出一种方法来为我正在从事的项目创建基于动态角色的导航解决方案。

导航应仅显示与用户角色相关的链接,例如:管理员将具有查看应用程序统计信息、管理客户帐户等的链接……而标准用户将具有管理其帐户、与朋友交流的链接, 等等..

我目前有一个名为Navigation的局部视图,其中包含一些用于角色检查的基本条件语句和用于显示适当链接的混合标记。这行得通,但是,我知道它很快就会变得难以管理。

导航局部视图:

@if(User.IsInRole("Admin")) {
    <li><a href="#">Statistics</a></li>
    <li><a href="#">Accounts</a></li>
    <li><a href="#">Dashboard</a></li>
} 
@if(User.IsInRole("User")) {
    <li><a href="#">Account</a></li>
    <li><a href="#">Friends</a></li>
}
// code omitted

有没有办法让这个逻辑脱离视图并让控制器处理这个?

4

1 回答 1

14

解决方案

按照建议,我为每个角色创建了一个名为 Menu 的 ChildAction 和部分视图。在操作中,我使用一些条件语句进行一些角色检查并呈现适当的视图。

这样可以将条件语句排除在视图之外,从而使其成为更清洁的解决方案。

我确信可以做一些事情来整理它,我会继续努力改进它。

这是我使用的解决方案。

在我希望菜单出现的布局视图中,我使用了这个。

@Html.Action("Menu", "Navigation")

然后我创建了一个名为 Navigation 的控制器并添加了一个名为 Menu 的 Action。

public class NavigationController : Controller
{

    [ChildActionOnly]
    public ActionResult Menu()
    {
        if (Roles.IsUserInRole("Administrator"))
        {
            return PartialView("_NavigationAdmin");

        }

        return PartialView("_NavigationPublic");
    }

}
于 2013-06-10T02:52:32.180 回答