使用Entity Framework将参数化列表传递到MVC中进行查看

时间:2009-12-31 13:04:44

标签: asp.net asp.net-mvc entity-framework view controller

在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中找到外键字段。

1 个答案:

答案 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>

<% } %>


<% } %>