2016-12-23 113 views
2

我正在创建一个MVC应用程序,但我希望导航栏针对不同类型的用户有所不同(对于某些用户,应该隐藏某些属性)。MVC动态导航栏

@using Microsoft.AspNet.Identity 
<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <title>@ViewBag.Title - My ASP.NET Application</title> 
    @Styles.Render("~/Content/css") 
    @Scripts.Render("~/bundles/modernizr") 

</head> 
<body> 
    <div class="navbar navbar-inverse navbar-fixed-top"> 
     <div class="container"> 
      <div class="navbar-header"> 
       <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
       </button> 
       @Html.ActionLink("Declaration System", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" }) 
      </div> 
      <div class="navbar-collapse collapse"> 
       <ul class="nav navbar-nav"> 
        <li>@Html.ActionLink("Home", "Index", "Home")</li> 
        <li>@Html.ActionLink("Rules", "Rules", "Home")</li> 
        <li>@Html.ActionLink("Declare", "Declare", "Account") 
        </li> 
        <li>@Html.ActionLink("Set homework", "SetHomework", "Account")</li> 
        <li>@Html.ActionLink("My marks", "MyMarks", "Account")</li> 
        <li>@Html.ActionLink("Classes", "Classes", "Account")</li> 
        <li>@Html.ActionLink("Contact", "Contact", "Home")</li> 
       </ul> 
       @Html.Partial("_LoginPartial") 
      </div> 
     </div> 
    </div> 
    <div class="container body-content"> 
     @RenderBody() 
     <hr /> 
     <footer> 
      <p>© 2016 - Project by Yulia Buyanova and Maciej Miśkiewicz</p> 
     </footer> 
    </div> 

    @Scripts.Render("~/bundles/jquery") 
    @Scripts.Render("~/bundles/bootstrap") 
    @RenderSection("scripts", required: false) 
</body> 
</html> 
<style> 
    footer { 

    position:fixed; 
     bottom:15px; 
    } 


</style> 

我存储在数据库我的用户类型,所以我想检查是否当前登录的人是X型的,然后显示正确的导航栏。还有一个未登录的分隔栏导航栏,我该怎么做?
编辑:
在正常conrollers我通过实体是这样的:

public ActionResult MyMarks() 
     { 
      ClassDeclarationsDBEntities1 entities=new ClassDeclarationsDBEntities1(); 
      return View(entities.Users.ToList()); 
     } 

但它是如何为导航栏工作?

+1

你不能只使用一个简单的'if'语句?例如'@if(userType ==“Admin”){...}' – DavidG

+0

@DavidG如何将我的数据库的所有实体都传递给此,以便我可以访问数据库并检查用户类型? –

+0

为什么你需要通过所有的实体?您只需要传入当前用户类型。 – DavidG

回答

0

您可以使用@ Html.RenderAction然后获得用户,但是您打算(缓存它),然后用数据库中的模型填充部分视图。

2

我想创建一个部分页面,并呼吁它_NavigationMenuPartial,并把这个代码在那里:

@model NavigationMenuModel 

<ul class="nav navbar-nav"> 
    @if (this.Model.UserType == UserType.Admin) { 
     <li>@Html.ActionLink("Home", "Index", "Home")</li> 
    } 
    <li>@Html.ActionLink("Rules", "Rules", "Home")</li> 
    <li>@Html.ActionLink("Declare", "Declare", "Account")</li> 
    <li>@Html.ActionLink("Set homework", "SetHomework", "Account")</li> 
    <li>@Html.ActionLink("My marks", "MyMarks", "Account")</li> 
    <li>@Html.ActionLink("Classes", "Classes", "Account")</li> 
    <li>@Html.ActionLink("Contact", "Contact", "Home")</li> 
</ul> 

从控制器传递模型所必需的信息在你的问题你的看法。然后,从该模型可以传递只有一部分你喜欢这个部分的需求:

@Html.Partial("_NavigationPartial", this.Model.NavigationMenuModel); 

这里是模型,但你可以创建它的不同取决于你的需要:

public class NavigationMenuModel { 
    public UserType UserType { get; set; } 
} 

public enum UserType { 
    Admin = 1, 
    Enquiry = 2 
} 

public class MarksModel { 
    public List<User> Users { get; set; } 
    public NavigationMenuModel NavigationMenuModel { get; set; } 
} 

控制器可以通过模型视图在你的问题,像这样的:

public ActionResult MyMarks() { 
    ClassDeclarationsDBEntities1 entities = new ClassDeclarationsDBEntities1(); 
    var model = new MarksModel(); 
    model.Users = entities.Users.ToList(); 
    model.NavigationMenuModel = new NavigationMenuModel { UserType = UserType.Admin }; 
    return View(model); 
} 

我刚刚通过了UserType.Admin作为一个例子,但你可以通过任何你需要的,并获得信息形成数据库。

这也是一种干净的方法,因为与您的导航相关的所有内容都是局部视图。