Dynamisches Menü in C# ASP.Net MVC3 Razor

Erklären

Ich versuche ein dynamisches Menü, laden der Elemente aus der Datenbank.
Ich brauche 3 Ebenen max im Menü wie dieses:

<ul>
   <li>Home</li>
   <li>Peoples
      <ul>
         <li>Employee
            <ul>
              <li>Create</li>
              <li>List</li>
              <li>Edit</li>
            </ul>
         </li>
         <li>Training</li>
         <li>Material Requisition</li>
      </ul>
   </li>
</ul

Nun, das ist, wie ich bin zu tun heute, aber ohne Erfolg:

Dem partial view "TopBar.cshtml" zeigt auf jeder Seite, und es heißt, innerhalb der "_Layout.cshtml" wie folgt:

_Layout.cshtml

<body>
    @Html.Partial("TopBar")
    <div class="container body-content">
        @RenderBody()
        (...)

und die "TopBar.cshtml" zeigt die Daten mit dem nachstehenden code

@model IEnumerable<SIGO.Models.TopMenu>
<div class="navbar navbar-inverse navbar-fixed-top">
    <div class="container">
        <div class="navbar-header">
            <div class="SigoLogo" onclick="location.href='@Url.Action("")'">
                <a href="@Url.Action("Index", "Home")" title="Início">
                    <img src="~/Content/images/Wlogo.png" />
                </a>
            </div>
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"></button>
        </div>
        <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
                @if (Model != null){
                    foreach(var item in Model.Where(p => p.Nivel == 0)) {
                        if (Model.Where(s1 => s1.Parent == item.TopMenuID) != null) {
                            <li>@item.Descricao
                                <ul>
                                    @foreach (var sub1 in Model.Where(s1 => s1.Parent == item.TopMenuID)) {
                                        if (Model.Where(s2 => s2.Parent == sub1.TopMenuID) != null) {
                                            <li>@sub1.Descricao
                                                <ul>
                                                    @foreach (var sub2 in Model.Where(s2 => s2.Parent == sub1.TopMenuID)) {
                                                    <li>@Html.ActionLink(sub2.Descricao,sub2.Action,sub2.Controller)</li>
                                                    }
                                                </ul>
                                            </li>
                                        }else{
                                            <li>@Html.ActionLink(sub1.Descricao,sub1.Action,sub1.Controller)</li>
                                        }
                                    }
                                </ul>
                            </li>
                        }else{
                            <li>@Html.ActionLink(item.Descricao,item.Action,item.Controller)</li>
                        }
                    }
                }
            </ul>
        </div>
    </div>
</div>

Dies ist die "TopMenu" Klasse

    public class TopMenuItem {
            [Key]
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public int Id { get; set; }             //Iterator
            public int Parent { get; set; }         //TopMenuItem parent id
            public bool Group { get; set; }         //If this have another item below
            public string Descricao { get; set; }   //Text to show
            public string Action { get; set; }      //Action to Go
            public string Controller { get; set; }  //Controller to Go
    }

Alle dieses Ergebnis in leere Liste, wie eine saubere Datenbank.
Aber, wenn ich eine Aktionsliste z.B. ein Konflikt tritt auf, da Stand Ansichten ("Liste.cshtml" und "TopBar.cshtml") beginnt mit:

@model IEnumerable<SIGO.Models.Employee>

oder

@model IEnumerable<SIGO.Models.TopMenu>

P. S.: ich benutze keine controller, um die Daten zu TopMenu.

Fragen

  • Wie kann ich das TopMenu?
  • Haben Sie eine andere Lösung?

Dank! Sorry für eventuelle Fehler in der übersetzung

InformationsquelleAutor Anpix | 2014-07-23

Schreibe einen Kommentar