2015-12-21 1 views
-2

J'ai une table appelée "Tabel_Items" dans la base de données avec ces domaines: id, parent et child:Comment faire dynamiquement Arbre en asp.net mvc

enter image description here

Je veux générer des balises HTML telles comme ceux-ci:

<ul> 
    <li>parent1 
     <ul> 
      <li>child1</li> 
      <li>child2 
       <ul> 
        <li>child21</li> 
        <li>child22</li> 
       </ul> 
      </li> 
     </ul> 
    </li> 
    <li>parent2 
     <ul> 
      <li>child3</li> 
     </ul> 
    </li> 
</ul> 

Je reçois mes articles avec une requête LINQ et les passer à la vue:

public ActionResult Index() 
{ 

    DataClasses1DataContext db = new DataClasses1DataContext(); 
    var items = from i in db.Table_Items 
       select i; 

    return View(items); 
} 

Comment puis-je faire défiler les "éléments" en vue et en faire une liste arborescente?


Je veux une expression lambda pour sélectionner les lignes qui ont "parentId == null" au début. Je tester un code comme celui-ci, mais a une erreur:

@foreach (var i in Model) 
{ 
     @Html.DisplayFor(x => i.ItemName.Where(i.ParentId==null)); 
} 
+0

Qu'avez-vous essayé jusqu'à présent? Une partie du problème est la conception de vos données. Votre table doit avoir ces champs: Id, ItemName, ParentId. Et, vous devez créer une relation un-à-plusieurs en utilisant Id comme clé primaire et ParentId comme clé étrangère. – ataravati

Répondre

0

Je résolu mon problem.thank pour moi:

<ul> 
@foreach (var x in Model.Where(f => f.ParentId == null)) 
{ 
    <li> 
     @Html.DisplayFor(f => x.ItemName) 
     <ul> 
      @foreach (var y in Model.Where(c => c.ParentId == x.Id)) 
      { 
       <li> 
        @Html.DisplayFor(c => y.ItemName) 
        <ul> 
         @foreach (var z in Model.Where(c => c.ParentId == y.Id)) 
         { 
          <li>@Html.DisplayFor(c => z.ItemName)</li> 
         } 
        </ul> 
       </li> 
      } 
     </ul> 
    </li> 
} 
</ul>