2011-10-05 44 views
1

我一直在这几天,它得到安宁我颇为头疼的数据链接...MVC3-如何从不同的控制器的观点

我有一个包含客户信息的客户机模型,然后我有一个地址为客户提供不同地址的模型。我想在每个客户的详细信息下显示(CRUD)表,当我点击客户的(CRUD)表中的详细信息链接时。我该如何去做呢?

+0

使用部分视图,您可以使用ajaxcalls或普通调用。 – Frederiek

回答

0

在显示客户端详细信息时使用复合视图模型,或者在显示客户端详细信息时使用AJAX加载地址。我可能会和前者一起工作,因为这两者是密切相关的,并且对于地址只有一个控制器或操作似乎过于矫枉过正(除非您不会在没有其他信息的情况下自行显示它们)。

public class ClientDetailsModel 
{ 
     public ClientDetails Details { get; set; } 
     public List<Address> Addresses { get; set; } 
} 


public ActionResult Details(int id) 
{ 
     var client = this.ClientRepository.GetByID(id); 
     var addresses = this.ClientRepository.GetAddressesForClient(client); 
     return View(new ClientDetailsModel { Details = client, Addresses = addresses }); 
} 

这类似于我会做什么,但它更可能是我只提取相关属性,并在平面模型类填写为每个客户端/地址的部分,而不是从实际使用的实体DB。 AutoMapper可以为此提供很大的帮助。

一旦进入视图,您可以将地址显示抽象为局部视图,并为每个地址渲染,如果需要重用代码。

... display client details... 

    @foreach (var address in Model.Addresses) 
    { 
     @Html.Partial("_Address", address) 
    } 
+0

我一直在阅读viewmodels andajax,但我只是没有得到它...我对此很新,你能否请我提供一步一步的过程,我该如何去做呢? – Cutie

+0

@Cutie以上不是AJAX。您只需使用实体中的数据为发送到视图的模型构建一个单独的类。该视图是针对此模型键入的,而不是您的实体模型。这个模型包含来自多个实体的数据(我在这个例子中直接使用它们,但实际上我可能通过复制所需的属性并填充它们来平整视图类)。 – tvanfosson

+0

哦..上面的Details方法是在Clientcontroller中实现的吗?我在getById()和getAddressForClient()中放什么,以及我在哪里实现它们? – Cutie

相关问题