在MVC项目中,我尝试创建一个视图,该视图具有父表中的标题以及其相关子表下面的后续列表。
我使用Entity Framework将表拉入项目,并在控制器命名空间中创建了以下Viewmodel:
public class ServicesViewModel
{
public ServicesViewModel(List<ServiceGroup> servicegroups, List<Service> services)
{
this.ServiceGroups = servicegroups;
this.Service = services;
}
public List<ServiceGroup> ServiceGroups { get; set; }
public List<Service> Service { get; set; }
}
然后在控制器Actionresult中我这样做了:
public ActionResult Index()
{
var servicegroups = _db.ServiceGroupSet.ToList();
var services = _db.ServiceSet.ToList();
return View(new ServicesViewModel(servicegroups,services));
}
..在视图中做到了这一点:
“%&gt;其他HTML代码等..
<% foreach (var m in Model.ServiceGroups) { %>
<strong><ul> <%= m.ServiceGroupName %></ul></strong>
<% foreach (var item in Model.Service) { %>
<li> <%= item.ServiceDescription %></li>
<% } %>
<% } %>
这一切都很好,但是为每个父记录运行所有子记录。我还没想过如何将那个过滤器放入视图中。
我在控制器中尝试了一个linq查询,但似乎无法在intellisense中找到外键字段。
答案 0 :(得分:1)
嗯..如果它是Master-Detail 2表并且你想要一个单独的视图模型,我建议你将你定义为ServiceGroup + List,然后传递它的列表进行查看。
但是,如果您的服务和ServiceGroup确实有自己的导航属性(EF或LINQ2SQL)。 您只需传递ServiceGroups即可查看,并使用Navigation Property ServiceGroup.Services枚举详细信息。
<% foreach (var m in Model.ServiceGroups) { %>
<strong><ul> <%= m.ServiceGroupName %></ul></strong>
**<% foreach (var item in m.Services) { %>**
<li> <%= item.ServiceDescription %></li>
<% } %>
<% } %>