我在尝试解决类似问题时查看了这个问题。我需要创建一个按类别排序的网格,同时按类别过滤主模型集合以显示在每个类别标题下。我为整个视图模型创建了一个编辑器模板,并从视图中调用 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。我正在为每个项目调用标准编辑器模板,以显示在类别标题下。
@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)
}