簡體   English   中英

Foreach Razor里面的Foreach

[英]Foreach inside of Foreach Razor

我正在嘗試編寫一個foreach循環,它將找到每個不同的類別類型,然后列出具有該類別分配的每個標題。

例如:

@model IEnumerable<CMESurvey.Models.SurveyProgramModel>

@{
    ViewBag.Title = "Home";
}

@foreach (var item in Model) {
    <h2>@Html.DisplayFor(modelItem => item.ProgramType.ProgramType)</h2>
    foreach (var listing in Model)
    {
        <ul>
            <li>@Html.DisplayFor(modelItem => listing.ProgramTitle)</li>
        </ul>
    }
}

調查回復模型:

  public class SurveyProgramModel
{

    [Key]
    public int ProgramId { get; set; }

    public int ProgramYear { get; set; }

    public int ProgramStatusId { get; set; }

    public string ProgramTitle { get; set; }



public virtual SurveyProgramModel SurveyProgramModel { get; set; }

public virtual PersonModel PersonModel { get; set; }

}

我遇到了兩個問題。

1.)我需要它只顯示每個類別一次,而不是列出每個項目實例的類別。

2.)它顯示所有ProgramTitle,而不僅僅是該循環的ProgramTitle。

不確定我應該使用的語法是什么。

如果我理解正確,那應該是這樣的

@foreach (var item in Model) { 
  <h2>@Html.DisplayFor(modelItem => item.ProgramType.ProgramType)</h2> 
  foreach (var listing in item.SurveyResponseModels) 
  { 
     <ul> 
       <li>@Html.DisplayFor(modelItem => listing.ProgramTitle)</li> 
     </ul> 
  } 
} 

看起來您需要在控制器中按ProgramType對枚舉進行分組。 這將使視圖保持良好和干凈。

IEnumerable<CMESurvey.Models.SurveyProgramModel> models = Foo(); //however you got them...
var grouped = models.GroupBy(s => s.ProgramType.ProgramType);
return View(grouped);

然后,您的視圖更簡單。 (修復模型類型后)。

@for(int i = 0; i < Model.Count; i++)
{
    <h2>@Html.DisplayFor(model => model[i].Key)</h2>
    <ul> 
    for(int j = 0; j < Model[i].Count; j++)
    {
        <li>@Html.DisplayFor(model => model[i][j].ProgramTitle)</li>
    }
    </ul>
}

替代方案:

或者,您列出一個列表:

var models = Foo();
var grouped = models.GroupBy(s => s.ProgramType.ProgramType)
                    .Select(x => x.Select(y => y))
                    .ToList();
return View(grouped);

然后你的觀點略有改變:

@for(int i = 0; i < Model.Count; i++)
{
    <h2>@Html.DisplayFor(model => model[i].First().ProgramType.ProgramType)</h2>
    <ul> 
    for(int j = 0; j < Model[i].Count; j++)
    {
        <li>@Html.DisplayFor(model => model[i][j].ProgramTitle)</li>
    }
    </ul>
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM