2012-10-25 5 views
11

Ich möchte jedes Element in meinem Modell in meiner Rasierer Ansicht durchlaufen, aber ich möchte alle Elemente zusammen gruppieren. Ich möchte dann jede Gruppe durchlaufen. Stellen Sie sich vor Ich habe eine Tabelle:Looping durch Modelle Inhalt in Razor

ID GroupNo GroupName 
1 1   Group1 
2 1   Group2 
3 1   Group3 
4 2   Group1 
5 2   Group2 
6 3   Group56 

Ich möchte wie etwas tun:

@foreach (var group in Model.GroupNo) { 
    <section> 
     <header>Group No is @group.GroupNo</header> 
     @foreach (var item in group) { 
      <p>GroupName: @item.GroupName</p> 
     } 
    </section> 
} 

Also meine Ausgabe lautet:

Group No is 1 
GroupName: Group1 
GroupName: Group2 
GroupName: Group3 
Group No is 2 
GroupName: Group1 
GroupName: Group2 
Group No is 3 
GroupName: Group56 

Ist das möglich?

Dank

+0

Haben Sie tatsächlich versucht, Ihrem Modell Datenstrukturen zu geben, die dem entsprechen, was Ihr (auf den ersten Blick gültiger) Razor-Code erwartet? – millimoose

+0

GroupNo ist definitiv kein IEnumerable oder? Ich frage, wie Sie eine foreach darauf machen –

Antwort

25

Ja, das ist einfach, die Linq GroupBy mit zu tun. Ich würde vorschlagen, Ihre Ansicht zu ändern @model IEnumerable<IGrouping<string, MyModel>> zu verwenden, die Sie wie folgt füllen würde:

var groupModel = MyModelCollection.GroupBy(item => item.GroupNo).ToArray(); 
return View(groupModel); 

dann einfach durch die Gruppe durchlaufen, wie Sie schrieb, außer group.Key statt group.GroupNo mit IGrouping der Schlüssel abzurufen:

@foreach (var group in Model) { 
    <section> 
     <header>Group No is @group.Key</header> 
     @foreach (var item in group) { 
      <p>GroupName: @item.GroupName</p> 
     } 
    </section> 
} 
+0

Funktioniert perfekt !! :) Vielen Dank – Rodders

+0

Das ist großartig, aber wie geht das zurück an den Controller? –

7

LINQ kann Ihnen helfen, das tun

@model IEnumerable<Project1.Models.Group> 


@foreach (var item in Model.Select(i=>i.groupno).Distinct().ToList()) { 
    <tr> 
     <td> 
      <header>Group No is @item</header> 
      @foreach (var grpName in Model.Where(i => i.groupno == item).ToList()) 
      { 
       <p>GroupName: @grpName.groupName</p> 
      } 
     </td> 
    </tr> 
} 
+0

Diese Logik hat mir viel Zeit gespart .. Danke! – Victor

-2
@{ 
    Layout = null; 
} 
<!DOCTYPE html> 
<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>Index</title> 
</head> 
<body> 
    <div> 

     @{ 
      String[] name = {"Prashant", "Rishabh", "Zaheer", "Pratima", "Rahul"}; 
      int i = 1; 
      while (i <= 5) 
      { 
       foreach(var x in name) 
       { 
         <p>@i. @x</p> 
         i++; 
       }; 
       break; 
      } 
     } 
    </div> 
</body> 
</html> 

O/p- 
1. Prashant 

2. Rishabh 

3. Zaheer 

4. Pratima 

5. Rahul