同様の問題を解決しようとしているときに、この質問を見ました。各カテゴリの見出しの下に表示されるようにメイン モデル コレクションをカテゴリ別にフィルタリングしながら、カテゴリ別に並べ替えられたグリッドを作成する必要がありました。ビュー モデル全体のエディター テンプレートを作成し、ビューから Html.DisplayForModel() を呼び出します。
ページ ビュー モデル
namespace GoodHousekeeping.MVC.Models
{
public class ViewIngredientPageModel
{
public IEnumerable<ViewIngredientModel> ViewIngredientModels { get; set; }
public IEnumerable<ViewIngredientCategoryModel>
ViewIngredientCategoryModels { get; set; }
}
}
モデルを見る
namespace GoodHousekeeping.MVC.Models
{
public class ViewIngredientModel
{
public int? IngredientId { get; set; }
[DisplayName("Ingredient Name")]
public string Name { get; set; }
public int IngredientCategoryId { get; set; }
#region navigation
public ViewIngredientCategoryModel IngredientCategory { get; set; }
#endregion
}
}
メインビュー
@model GoodHousekeeping.MVC.Models.ViewIngredientPageModel
@Html.DisplayForModel()
EditorTemplate - これは、ビュー モデル全体に取り組んでおり、フィルタリングを行っている場所です。ファイル名は、shared/editortemplates フォルダー内の ViewIngredientPageModel.cshtml です。各項目がカテゴリ ヘッダーの下に表示されるように、標準の editorfor テンプレートを呼び出しています。
@model GoodHousekeeping.MVC.Models.ViewIngredientPageModel
@foreach (var category in Model.ViewIngredientCategoryModels)
{
<p>@category.IngredientCategoryName</p>
var category1 = category;
var viewIngredientModels = (from i in Model.ViewIngredientModels
where i.IngredientCategoryId == category1.IngredientCategoryId
select i);
@Html.DisplayFor(m => viewIngredientModels)
}