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