在asp.net mvc中应该在哪里创建/操作视图模型?

时间:2011-05-12 14:40:17

标签: c# asp.net asp.net-mvc asp.net-mvc-3

在ASP.NET MVC中,应该在哪里使用视图模型?

这应该在控制器中严格完成吗?或者可以说,从存储库方法返回一个视图模型?

4 个答案:

答案 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层一无所知 - 因此您可以获得最佳的重用并尽可能地将其解耦。