2011-10-05 34 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

相關問題