6

それぞれの個別のカテゴリタイプを検索し、そのカテゴリが割り当てられている各タイトルを一覧表示する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; }

}

私は2つの問題に直面しています。

1.)各アイテムインスタンスのカテゴリを一覧表示するのではなく、各カテゴリを1回だけ表示する必要があります。

2.)そのループのProgramTitleだけでなく、すべてのProgramTitleを表示しています。

使用する構文がわからない。

4

2 に答える 2

3

私が正しく理解しているなら、それは次のようになるはずです

@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> 
  } 
} 
于 2012-07-03T18:44:12.757 に答える
2

コントローラーで 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>
}
于 2012-07-03T19:03:21.260 に答える