【问题标题】:Where to instantiate and populate view models?在哪里实例化和填充视图模型?
【发布时间】:2013-07-07 15:12:31
【问题描述】:

基本上在我的应用程序中,我开始获得一些重型视图模型(以及这些视图模型中的视图模型)。 因此,当我在我的控制器中实例化并填充它们时,控制器方法似乎变得很厚(即使所有逻辑都在模型层中处理并且控制器只调用方法来检索数据以插入到视图模型中)。

哪里是实例化和填充我的视图模型的最佳位置?

【问题讨论】:

  • 通常我会在控制器中实例化视图模型,因为它们唯一的真正目的是传递给视图。您能否提供一个您认为可以改进的代码示例?也许您可以将控制器中发生的一些逻辑移至视图模型本身?

标签: asp.net-mvc asp.net-mvc-4


【解决方案1】:

哪里是实例化和填充我的视图模型的最佳位置?

这将在您的应用程序的映射层中。例如,如果您使用AutoMapper,您的控制器代码可能如下所示:

public ActionResult Index(int id)
{
    DomainModel model = repository.Get(id);
    ViewModel viewModel = Mapper.Map<DomainModel, ViewModel>(model);
    return View(viewModel);
}

或者使用自定义操作过滤器,它甚至可以进一步简化为:

[AutoMap(typeof(DomainModel), typeof(ViewModel))]
public ActionResult Index(int id)
{
    DomainModel model = repository.Get(id);
    return View(model);
}

当然,如果您不使用 AutoMapper 而是使用一些自定义代码,那不是问题。您只需将一些映射接口注入到您的控制器中即可完成这项工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多