我一直在這幾天,它得到安寧我頗爲頭疼的數據鏈接...MVC3-如何從不同的控制器的觀點
我有一個包含客戶信息的客戶機模型,然後我有一個地址爲客戶提供不同地址的模型。我想在每個客戶的詳細信息下顯示(CRUD)表,當我點擊客戶的(CRUD)表中的詳細信息鏈接時。我該如何去做呢?
我一直在這幾天,它得到安寧我頗爲頭疼的數據鏈接...MVC3-如何從不同的控制器的觀點
我有一個包含客戶信息的客戶機模型,然後我有一個地址爲客戶提供不同地址的模型。我想在每個客戶的詳細信息下顯示(CRUD)表,當我點擊客戶的(CRUD)表中的詳細信息鏈接時。我該如何去做呢?
在顯示客戶端詳細信息時使用複合視圖模型,或者在顯示客戶端詳細信息時使用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)
}
我一直在閱讀viewmodels andajax,但我只是沒有得到它...我對此很新,你能否請我提供一步一步的過程,我該如何去做呢? – Cutie
@Cutie以上不是AJAX。您只需使用實體中的數據爲發送到視圖的模型構建一個單獨的類。該視圖是針對此模型鍵入的,而不是您的實體模型。這個模型包含來自多個實體的數據(我在這個例子中直接使用它們,但實際上我可能通過複製所需的屬性並填充它們來平整視圖類)。 – tvanfosson
哦..上面的Details方法是在Clientcontroller中實現的嗎?我在getById()和getAddressForClient()中放什麼,以及我在哪裏實現它們? – Cutie
使用部分視圖,您可以使用ajaxcalls或普通調用。 – Frederiek