将视图模型重塑为模型

本文关键字:模型 视图 | 更新日期: 2023-09-27 18:01:46

在客户端,我以一种根据视图需要定制的方式显示数据。

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

上的数据

客户端以适应我的域的要求。

重塑我的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; }
}

所有的数据,我需要我的模型周期是在RowViewModel。

我需要重塑我的SavePeriodListViewModel为LessonplannerResponse

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

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

我应该把链接重塑代码放在哪里?或者更一般地问我应该把这样的代码在asp.net mvc ?

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

service不是选项,因为它不应该知道视图模型

将视图模型重塑为模型

看来映射需要在控制器内部进行。我希望控制器动作是这样定义的:

public ActionResult SomeAction(SavePeriodListViewModel model)
{
    // transform from model to LessonplannerResponse
    // validate model
    // do something with the model and return a view
}

从我们对您的流程的观察来看,进行转换似乎不是服务的责任,也不是客户端的责任——特别是因为您已经在您的问题中排除了客户端。

下面是我如何对ViewModel这样做的示例,您也可以在visa verse中实现它。

  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());