将视图模型重塑为模型

时间:2013-03-02 12:22:14

标签: c# asp.net-mvc viewmodel

在客户端,我以为视图需求定制的方式显示数据。

当用户保存并将数据发送到服务器时,我不想重塑

上的数据

客户端以满足我的域的要求。

要将我的ViewModel重塑为我的模型,我可以这样做:

var periods = periodListViewModel.CellViewModels
                                 .SelectMany(c => c.Rows)
                                 .Select(
                                     p => 
                                        new Period { LessonNumber = p.LessonNumber });

此代码必须放在有正确责任的地方。

这些是我的课程:

 public class SavePeriodListViewModel
    {
        public int SchoolyearId { get; set; }
        public IEnumerable<CellViewModel> CellViewModels { get; set; }
    }

public class CellViewModel
    {
        public CellViewModel()
        {
            Rows = new List<RowViewModel>();
        }
        public List<RowViewModel> Rows { get; set; }
    }

public class RowViewModel
{
        public string DayName { get; set; }
        public string SchoolclassCode { get; set; }
        public string Content { get; set; }
        public int LessonNumber { get; set; }
}

public class LessonplannerResponse
{
        public int SchoolyearId { get; set; }
        public IEnumerable<Period> Periods { get; set; }
}

我的模型Period所需的所有数据都在RowViewModel中。

我需要将SavePeriodListViewModel重塑为LessonplannerResponse

当然,AutMapper可以处理RowViewModel到Period映射,但我的问题不在那个区域。

AutoMapper正在映射而不是重塑集合。

我应该在哪里放置linq重塑代码?或者更一般的问我应该把这些代码放在asp.net mvc中?

  • 客户端?
  • 控制器动作?

service不是选项,因为它不应该知道viewmodel。

2 个答案:

答案 0 :(得分:0)

以下是我如何使用ViewModel进行签名的示例。

  Mapper.CreateMap<Faq, FaqViewModel>()
                  .ForMember(x => x.Answer, opt => opt.MapFrom(src => src.Answer))
                  .ForMember(x => x.Question, opt => opt.MapFrom(src => src.Question));

  var sourceOfModels = _repository.GetFaqListByAppId(id);
  var resultOfViewModels = Mapper.Map<List<Faq>, List<FaqViewModel>>(list.ToList());

这对我来说非常适合。

答案 1 :(得分:0)

看起来映射需要在控制器内部进行。我希望Controller Action的定义类似于:

public ActionResult SomeAction(SavePeriodListViewModel model)
{
    // transform from model to LessonplannerResponse

    // validate model

    // do something with the model and return a view
}

从我们对您的流程的看法来看,转换似乎不是服务的责任,也不是客户方的责任 - 特别是因为您已经排除了你问题中的客户方。