2016-08-25 8 views
0

コントローラの[HttpPost] UpdateアクションメソッドでAutoMapperを使用できません。ASP.NET MVCのUpdateModelからUpdateModelへのEntity Trackingフィールドを追跡する

私は、CreatedDate、CreatedBy、ModifiedDate、ModifiedByなどのEntityトラッキングフィールドを持っていますが、ViewModelのフィールドとしてフィールドを持っていません。更新アクションメソッドでユーザー投稿フォームが、私は、通常のようなものだろうとき

:この時点で

var product = Mapper.Map<Product>(productViewModel); 

を追跡フィールドがNULLです。私はそれらを得ることはできません。私は2つの選択肢があるように見えます

:それらがサーバーにポストバックされるように

  1. はちょうど「ID」のような隠されたフィールドとしてビューモデルにして、HTMLで追跡フィールドを追加します。

  2. 新しい製品オブジェクトを作成する代わりに、viewModel.Idに基づいてデータベースから製品を取得し、フォームでユーザーが編集した可能性のあるすべての値をviewModelsの新しい値で手動で上書きします。

誰もがこれに関する追加の考えや勧告を持っていますか?ステップ1は私が必要としないページに行く余分なデータであり、ステップ2はAutoMapperのない余分なデータベース呼び出しと不潔なコードです。

+1

オプション1このシナリオで使用します。とにかくページにモデルをバインドしていますが、さらにいくつかのフィールドが傷つくことはありません。データベースへの別の旅行よりも良い!しかし、あなたは正しい、私はそれらがあなたの唯一の選択肢だと思う。 – garethb

答えて

1

私はまず、それがHTMLインジェクション攻撃を停止するオプション2.

を使用することになり、ユーザーは単にあなたのHTMLを編集し、編集のために公開するつもりはないフィールドを変更することができます。

第2に、基本モデルにフィールドを編集したり追加したりするときに間違ってしまうのは難しいです。あなたはあなたのviewModelでそれらを持ち歩く必要がある追加のプロパティを追加するときに心配する必要はありません。

第3に、巨大なオブジェクトでない限り、データベース呼び出しはあまり遅延を追加しません。ユーザーは通常、とにかくセーブ操作を少し待っても構いませんが、アプリが実際に何かをやっていることが気になります。 :)

+0

htmlインジェクション攻撃について考えていませんでした。この返事をありがとう! –

関連する問題