1

使用 MVC2

如果当前登录的用户没有设置正确的标志,则有一个需要隐藏某些菜单的母版页。

似乎是一个普遍的问题。找到要求所有控制器都从基本控制器继承的示例(我有),并且在基本控制器的构造函数中,可以将某些参数传递给 ViewData。这很好,对我来说很容易做到,但是在基本控制器的构造过程中,User.Identity 和 Request 对象为 NULL。

如何获取当前登录用户的 User.Identity,以便在呈现母版页视图之前查询数据库并相应地修改 ViewData 集合?

谢谢

4

1 回答 1

1

您可以将子操作与Html.Action 和 Html.RenderAction助手一起使用。所以你可以有一个控制器动作,它返回一个视图模型,指示当前登录的用户信息:

public MenuController: Controller
{
    public ActionResult Index()
    {
        // populate a view model based on the currently logged in user
        // User.Identity.Name
        MenuViewModel model = ...
        return View(model);
    }
}

并具有相应的强类型局部视图,该视图将呈现或不呈现菜单。最后在母版页内包括菜单:

<%= Html.Action("Index", "Menu") %>

这样你就可以拥有一个完全独立的视图模型、存储库和菜单控制器。您仍然可以为此控制器使用构造函数注入,并且所有内容都保持强类型。当然,基于当前页面的主控制器会有一个完全不同的视图模型。您不需要所有操作都应返回的基本控制器或某些基本视图模型。

于 2011-01-10T07:28:12.833 回答