如何列出cshtml视图中不同表的记录?

时间:2014-03-27 19:38:16

标签: asp.net-mvc database razor

我在ASP.NET MVC项目中遇到问题。我有一个数据库,我有几个表,我想在我的View中列出每个表中的所有记录,我只能使用一个表来执行此操作,我将在这里提供与一个表一起使用的代码我想做什么。

控制器:

我只使用一个表:

Mp5DataclassesDataContext db = new Mp5DataclassesDataContext();
public ActionResult Admin()
{
    return View(db);
}

这就是我想要做的事情:

    return View(db);

此时我可以调试并查看所有表都在该db对象中,并包含所有正确的数据。然后问题出在我的视图

查看:

@*This is defined at the top of my .cshtml*@
@model IEnumerable<Interface_AutoUtad.Models.Mp5DataclassesDataContext>

@*This is the code that works with only one table*@
@foreach (var item in Model)
{
     @Html.DisplayFor(modelItem => item.table_column)
}

@*What I am trying to do:*@
@foreach (var item in Model)
{
     @Html.DisplayFor(modelItem => item.some_other_table.table_column)
}

我无法让最后一部分工作,因为&#34; some_other_table&#34;没有出现。 有没有办法实现这个目标?我希望遍历每个表,然后迭代遍历该表中的每个记录。

提前谢谢大家:)

1 个答案:

答案 0 :(得分:1)

看起来你已经设置了&#34;模型&#34;让您的视图成为您的应用程序DbContext。不要这样做。视图仅在运行时处理,查询到数据库方式视图的逻辑太多。任何错误只会在运行时公开,并且您有很大的错误可能性。

视图旨在仅使用一种类型。如果需要在同一视图中使用多种类型,则可以使用视图模型或使用子操作。

查看模型

public class MultipleTypesViewModel()
{
    public IEnumerable<SomeType> SomeTypes { get; set; }
    public IEnumerable<OtherType> OtherTypes { get; set; }
    ...
}

然后在你看来:

@model Namespace.To.MultipleTypesViewModel

...

@foreach (var item in Model.SomeTypes)
{
    @Html.DisplayFor(modelItem => item.table_column)
}

@foreach (var item in Model.OtherTypes)
{
    @Html.DisplayFor(modelItem => item.table_column)
}

...

儿童行动

[ChildActionOnly]
public ActionResult ListSomeTypes()
{
    var someTypes = db.SomeTypes.ToList();
    return PartialView(someTypes);
}

[ChildActionOnly]
public ActionResult ListOtherTypes()
{
    var otherTypes = db.OtherTypes.ToList();
    return PartialView(otherTypes);
}

...

然后,为每个创建一个适当的局部视图:

<强> ListSomeTypes.cshtml

@model IEnumerable<Namespace.To.SomeType>

@foreach (var item in Model)
{
    @Html.DisplayFor(modelItem => item.table_column)
}

<强> ListOtherTypes.cshtml

@model IEnumerable<Namespace.To.OtherType>

@foreach (var item in Model)
{
    @Html.DisplayFor(modelItem => item.table_column)
}

等。最后在你的主视图中:

@Html.Action("ListSomeTypes")
@Html.Action("ListOtherTypes")

(在这种情况下,主视图的模型完全不相关。)