在ASP.NET MVC中,应该在哪里使用视图模型?
这应该在控制器中严格完成吗?或者可以说,从存储库方法返回一个视图模型?
答案 0 :(得分:6)
在我看来,viewmodels特定于任何应用程序将使用它们,而存储库将返回所有应用程序通用的模型。所以我要说视图模型应该在网站中从存储库返回的通用模型中创建,而不是将存储库绑定到了解视图的布局。
答案 1 :(得分:3)
严格来说,您的存储库应该返回域对象
存储库:“使用类似集合的接口访问域对象,在域和数据映射层之间进行调解。”
Fowler(PoEAA)
答案 2 :(得分:1)
应在控制器中实例化Viewmodels并将其传递给强类型视图。通常,ViewModel将包含呈现视图所需的多个模型类型。这是一个快速示例:
假设您有两个模型对象Orders和Customer
您希望在页面顶部显示客户详细信息,并在该客户的索引视图中显示订单网格。
public class CustomerModel
{
//properties
}
public class OrderModel
{
//properties
}
public class CustomerVM
{
public CustomerModel customer { get; set; }
public IEnumerable<OrderModel> orders { get; set; }
}
//and in your controller
public class CustomerController : Controller
{
public ActionResult Index(int id)
{
CustomerVM vm = new CustomerVM();
vm.customer = CustomerRepository.GetCustomer(id);
vm.orders = OrdersRepository.GetOrdersForCustomer(id);
return View(vm);
}
}
答案 3 :(得分:0)
存储库应该位于您的域和UI之间 - 存储库应该对您的UI层一无所知 - 因此您可以获得最佳的重用并尽可能地将其解耦。