0

たとえば、クラスとクラスDateCreatedにプロパティがあります。しかし、私の編集ビューでは、入力もストレージも何もありません。2013/03/17の の商品を編集すると、に戻されるは常に '0001/01/01' になります。未使用のフィールドごとに非表示の入力を編集ビューに追加しない限り、この情報は常に失われます。ProductProductDetailModelDateCreatedDateCreatededDateCreatedProductDetailModel

どのプロパティProductDetailModelが実際に署名された値であるか、フォーム要素が存在しないために単なるデフォルト値であるかを知る方法はありますか?

ビュー モデルで、更新されたフィールドのリストを維持する独自のモデル バインダーを作成して、保存する前にこれらの値を元のオブジェクトに戻すことしかできないようにする必要がありますか?

4

2 に答える 2

3

AutoMapperそれを可能にする非常に優れた機能があります。ビュー モデルには、ビューで使用されるプロパティのみを含める必要があります。次に、製品をロードしてデータ ストアから更新し、AutoMapper を使用して、ビュー モデルの一部であるプロパティのみを更新するジョブを実行します。

[HttpPost]
public ActionResult Edit(EditProductViewModel viewModel)
{
    Product productToUpdate = repo.GetProduct(viewModel.Id);
    Mapper.Map<EditProductViewModel, Product>(viewModel, productToUpdate);
    // at this stage the product domain model will have only its properties updated
    // that were present in the view model (a.k.a in the view)
    repo.Update(productToUpdate);

    ...
}
于 2013-03-17T18:05:28.893 に答える
0

製品をリポジトリからロードし、ビュー モデルで表されるフィールドを上書きしてから、変更を保存します。

ViewModel には、ビューに必要なデータのみを含める必要があることに注意してください。データ モデルと少し重複する可能性がありますが、同じにはなりません。そのため、データ モデルを渡すだけでなく、ViewModel を使用します。

于 2013-03-17T17:10:31.703 に答える