2016-12-23 10 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タイプであるかどうかをチェックしてから正しいnavbarを表示したいと思います。また、ログインしていないためのseparatr navbarもあります。これはどうやって行いますか?
編集:私は、エンティティをこのように渡し、通常のconrollersで

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

しかし、どのようにそれはナビゲーションバーのために働くのでしょうか?

+1

単純な 'if'文を使うことはできませんか?例: '@if(userType ==" Admin "){...}' – DavidG

+0

@DavidGデータベースにアクセスしてユーザータイプをチェックできるように、私のDBのすべてのエンティティにこれを渡すにはどうしたらいいですか? –

+0

なぜすべてのエンティティを渡す必要がありますか?あなたは、現在のユーザータイプを渡す必要があります。 – DavidG

答えて

0

@ Html.RenderActionを使用してユーザーを取得することもできますが(キャッシュする)、部分ビューにdbのモデルを取り込みます。私は部分的なページを作成し、_NavigationMenuPartialそれを呼び出し、そこにこのコードを入れてしまうでしょう

2

@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に合格したが、あなたが必要なものは何でも合格とし、情報を得ることができます。このように、あなたの質問であなたのビューにモデルを渡しますデータベースを形成する。

これは、ナビゲーションに関連するすべてが部​​分的な表示になっているため、きれいなアプローチです。

関連する問題