您好,我是初学者,我正在使用 ASP.NET和MVC5 。
我想制作 IEnumerable<> Food-Menu-Pricelist,其中包含1个foreach中的嵌套标题(课程),因此我可以使用我使用Entity Framework进行的CRUD操作创建或编辑新字符串(CourseName)。
我将在下面的链接中嵌入一张图片,我将其制作为半/硬编码,就像您在代码中看到的那样,标题是硬编码的。
预览我想要达到的结果:
我有2个型号:
有没有办法可以将这个表格放在1个foreach 中,这样我也可以使用我定义的te模型用CRUD-Operations编辑标题?
我已经尝试了很多事情。无论如何这是我在Stackoverflow上的第一个问题..
@model IEnumerable<Project_Lameau.Models.Dish>
@{
ViewBag.Title = "Index";
}
<h2>Suggestie</h2>
<table class="table">
@foreach (var item in Model.Where(d => d.CourseName.Contains("Suggestie")))
{
<tr>
<td>@item.DishName</td>
<td class="text-right">@item.Price</td>
</tr>
}
</table>
<hr />
<h2>Salade</h2>
<table class="table">
@foreach (var item in Model.Where(d => d.CourseName.Contains("Salade")))
{
<tr>
<td>@item.DishName</td>
<td class="text-right">@item.Price</td>
</tr>
}
</table>
<hr />
<h2>Voorgerecht</h2>
<table class="table">
@foreach (var item in Model.Where(d => d.CourseName.Contains("Voorgerecht")))
{
<tr>
<td>@item.DishName</td>
<td class="text-right">@item.Price</td>
</tr>
}
</table>
<hr />
<h2>Hoofd Vlees</h2>
<table class="table">
@foreach (var item in Model.Where(d => d.CourseName.Contains("Hoofd Vlees")))
{
<tr>
<td>@item.DishName</td>
<td class="text-right">@item.Price</td>
</tr>
}
</table>
<hr />
<h2>Hoofd Vis</h2>
<table class="table">
@foreach (var item in Model.Where(d => d.CourseName.Contains("Hoofd Vis")))
{
<tr>
<td>@item.DishName</td>
<td class="text-right">@item.Price</td>
</tr>
}
</table>
<hr />
<h2>Vega</h2>
<table class="table">
@foreach (var item in Model.Where(d => d.CourseName.Contains("Vega")))
{
<tr>
<td>@item.DishName</td>
<td class="text-right">@item.Price</td>
</tr>
}
</table>
答案 0 :(得分:2)
您的顶级foreach
类似于
foreach (var courseGroup in Model.GroupBy(m => m.CourseName))
每个项目都是:
<h2>courseGroup.Key</h2>
<table class="table">
@foreach (var item in courseGroup)
{
<tr>
<td>@item.DishName</td>
<td class="text-right">@item.Price</td>
</tr>
}
</table>
但是,您可以更多地组织数据,因此如果您定义了类(以及数据库中的表),则如下所示:
public class Course
{
public string CourseName { get; set; }
public List<Dish> Dishes { get; set; }
}
public class Dish
{
public string DishName { get; set; }
public decimal Price { get; set; }
}
然后你的代码变得更简单了:
foreach (var course in Model) //or Model.Courses - up to you
每个项目都是:
<h2>course.CourseName</h2>
<table class="table">
@foreach (var item in course.Dishes)
{
<tr>
<td>@item.DishName</td>
<td class="text-right">@item.Price</td>
</tr>
}
</table>
答案 1 :(得分:0)
感谢Rob的帮助。我很感激!
我选择第一个选项。
我不得不使用lamda-expression .Include(m => m.Course)
扩展Controller代码,因为我需要包含第一个类(Course.cs)的属性(CourseName)。 Dish类已经有Lookup属性public Course Course { get; set; }
)所以我改变了@foreach (var courseGroup in Model.GroupBy(m => m.Course.CourseName))
中的顶级foreach,然后一切都很顺利。
第二种选择不起作用。我认为,因为两个类Course.cs之间的demodata是一个具有CourseId属性的Dish.c。
干杯!