我在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;没有出现。 有没有办法实现这个目标?我希望遍历每个表,然后迭代遍历该表中的每个记录。
提前谢谢大家:)
答案 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")
(在这种情况下,主视图的模型完全不相关。)