【发布时间】:2019-09-06 23:26:37
【问题描述】:
我正在修改 ASP.NET MVC 4 模板,我需要有关如何设计复杂视图布局的指导。
我已经创建了一个模型,用于获取 SQL Server DB 中存储过程返回的数据。视图正在从 IEnumerable<> 对象中的模型获取数据。如果您要查看存储过程的原始输出,它看起来像这样:
**Name** **Objects**
John Orange
John Banana
John Apple
我使用视图模板根据下面的逻辑创建了一个简单的表格,但正如预期的那样,它的呈现方式与存储在IEnumerable<> 对象中的完全相同。该名称出现在表格的每一行输出中,如上所示。
@model IEnumerable<projectname.Models.ObjectsModel>
<table class="table">
...
...
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Objects)
</td>
...
相反,我想创建一个非表格形式的视图布局,它将名称显示为标题,对象显示为项目符号列表,以及其他地方的其他属性,没有冗余数据。我的问题是,如果我使用@foreach (var item in Model) 显示IEnumerable<> 中的项目,我最终会得到三个重复的条目,因为Name 字段中的值不是唯一的。
执行此操作的“最佳实践”方法是什么?有人可以指出正确的方向吗?
【问题讨论】:
-
将上面代码中的
<tr>和<td>标签更改为<ul>和<li>标签,或多或少? -
不要使用
@Html.DisplayFor在你想要的一些HTML结构中使用@item.<property>:<h1>@item.Name</h1><ul><li>@item.Objects</li></ul> -
感谢您的建议。我想弄清楚的主要事情是如何在不让
@foreach (var item in Model)循环为 SP 输出中的每一行生成重复条目的情况下显示这些数据。 -
您的意思是要按名称对结果进行分组吗?如果是这样,我想您可以在视图中或之前使用 LINQ 来做到这一点。
-
如果您在此处包含所需的输出 HTML 标记可能会有所帮助。 “其他地方的其他属性”到底是什么意思?
标签: c# asp.net sql-server asp.net-mvc bootstrap-4