使用MVC2
如果当前登录的用户没有设置正确的标记,则需要隐藏某些菜单的母版页。
似乎是一个常见的问题。找到的示例要求所有控制器都从基本控制器(我有)继承,并且在基本控制器的构造函数中,可以将某些参数传递给ViewData。这很好,对我来说很容易,但在构造基本控制器时User.Identity和Request对象是NULL。
如何访问当前登录用户的User.Identity,以便查询数据库&在呈现母版页视图之前相应地修改ViewData集合吗?
由于
答案 0 :(得分:1)
您可以使用子操作以及Html.Action and 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") %>
通过这种方式,您可以为菜单创建一个完全独立的视图模型,存储库和控制器。您仍然可以为此控制器使用构造函数注入,并且所有内容都保持强类型。当然,基于当前页面的主控制器将有一个完全不同的视图模型。您不需要具有所有操作都应返回的基本控制器或某些基本视图模型。