虽然在 MVC 视图中循环不一定是坏事,但一些纯粹主义者(就像您一样)更喜欢保持他们的视图超级干净并且没有任何处理逻辑。
对您来说幸运的是,MVC 中有一个鲜为人知的宝石,它可以获取 IEnumerable 对象列表,并将其呈现到绑定到单个对象的编辑器/显示模板 - 它为您处理循环。
例如,如果您设置了一个显示模板部分视图,我们将其称为 BarModel.cshtml(应存储在其中之一)PartialViewLocationFormats 搜索路径,在“DispalyTemplate”子文件夹下):
@model MyApp.BarModel
<li>@Model.SomeValue: @Model.SomeOtherValue</li>
现在,在您看来,您可以简单地使用以下命令调用显示模板Html.DisplayFor
,并将完整列表作为模型传递:
<div>
Bars:
<ul>
@Html.DisplayFor(m => m.Bars)
</ul>
</div>
就是这样。它将获取您的 BarModel 列表,并为列表中的每个 BarModel 对象生成部分显示模板。
当然,对于您的简单示例,这实际上取决于个人喜好,因为没有什么大的好处,除非您只是想摆脱循环逻辑。
但是,如果您需要在同一视图或不同视图的多个位置共享此显示模板,那么构建这样的视图并减少复杂性和代码重复确实是值得的。
另请注意:此方法假设您想要显示列表中的每一项,并按照其存储在列表中的顺序显示。如果您需要有条件地显示项目,或者想要以不同的顺序显示,则此方法将不起作用。
但是,如果是这种情况,我建议完全按照您需要在视图中显示的方式设置列表。也就是说,在构建列表的控制器/服务中进行任何过滤/排序,并让您的视图仅渲染模型。