首页 > 解决方案 > 如何在视图中将 2 个不同表中的数据显示为一个列表

问题描述

我有一个页面,我想在其中显示图像滑块内不同表格中的图像。但是我的图像一个接一个地显示。有没有办法将来自两个不同表的列表合并到一个视图中。

<div class="Slideshow">
@foreach (var table1 in Model.table1)
{
   <img src=@Url.Content(table1.imageurl) width="300"/>
}
@foreach (var table2 in Model.table2)
{
   <img src=@Url.Content(table2.imageurl) width="300" />
}

数据库表

标签: c#asp.net-mvcrazor

解决方案


如果您的属性是同一类型,则可以将它们连接起来:

@foreach (var table1 in Model.table1.Concat(Model.table2))

如果它们不是同一类型,那么您需要先将它们投影到通用类型中。这可能很简单:

@foreach (var table1 in Model.table1.Select(t => t.imageurl).Concat(Model.table2.Select(t => t.imageurl)))

从风格上讲,理想情况下,这将发生在模型或控制器而不是视图中。视图实际上应该只绑定到模型上的属性,而不需要操作它们。

例如,您可以将计算属性添加到模型中:

public IEnumerable<SomeType> Tables
{
    get { return table1.Contact(table2); }
}

然后在您看来,您只需遍历Model.Tables. 或者,如果您真的只需要一个表列表,那么您的模型应该只有一个,并且您应该在填充模型时组合不同的数据源。但是我们越深入这个,我们就必须对你的数据模型做出更多的假设。


推荐阅读