0

クライアント側では、ビューのニーズに合わせてカスタマイズされた方法でデータを表示します。

ユーザーがデータを保存してサーバーに送信するとき、データの形状を変更したくありません

私のドメインの要件に合うようにクライアント側。

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のどこに配置すればよいですか?

  • クライアント側?
  • コントローラーアクション?

ビューモデルを認識してはならないため、サービスはオプションではありません。

4

2 に答える 2

0

マッピングはコントローラー内で行う必要があるように見えます。コントローラアクションは次のように定義されていると思います。

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

    // validate model

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

私たちがあなたのプロセスを調べていることから、変換を行うのはサービスの責任ではないようです。また、クライアント側の責任でもないようです。特に、クライアント側をすでに除外しているためです。あなたの質問で。

于 2013-03-02T18:39:45.660 に答える
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());

これは私にとって完璧な作品です。

于 2013-03-02T12:36:52.900 に答える