[英]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.