在razor页面中检查login用户angular色

@if (Request.IsAuthenticated && User.Identity.Name=="administrator") { <div id="sidebar"> <div class="module"> <ul class="menu"> <li>@Html.ActionLink("Home", "Index", "Home")</li> <li>@Html.ActionLink("About", "About", "Home")</li> <li>@Html.ActionLink("Contact", "Contact", "Home")</li> </ul> </div> <div class="mainContent"> Hello, @User.Identity.Name ! </div> </div> 

这是我的布局,如果用户身份validation为pipe理员,但这种检查看起来不好,我需要检查用户的angular色,而不是他的名字。

这是控制器的方法

  public ActionResult AuthenticatedUserLayout(string username) { var lst=userContext.UserProfiles.ToList(); var user = lst.Select(u => u.UserName == username); if(IsAdmin(Session["LoginUser"].ToString())) return View(user); else return Index(); } 

我也发现return View(user)是不好的,因为我不知道如何使用该user

 @if (Request.IsAuthenticated && User.IsInRole("Administrators")) { <div id="sidebar"> <div class="module"> <ul class="menu"> <li>@Html.ActionLink("Home", "Index", "Home")</li> <li>@Html.ActionLink("About", "About", "Home")</li> <li>@Html.ActionLink("Contact", "Contact", "Home")</li> </ul> </div> <div class="mainContent"> Hello, @User.Identity.Name ! </div> </div> } 

戴夫的答案是正确的。 我build议你考虑在你的模型上使用一个名为IsAdministratorCanSeeSidebar的属性,并把这个问题作为域逻辑来回答。

该观点应该只与模型一起工作。 看着这个线程,从数据库中读取数据,在回答域问题方面是一样的。 所有这些types的问题应该在你的控制器把模型交给视图之前得到回答。