2012-03-06 16 views
2

ASP.NET MVCでモデルステートを使用して、ユーザーが変更を加えたかどうかを確認するにはどうすればよいですか?例えばモデルが変更されているかどうかを調べるASP.NET MVC

フォームがロードされ、ユーザーがフォーム上の変更を行う能力を持っています。 変更後、ユーザーは「適用」または「キャンセル」ボタンをクリックします。

ボタンをクリックすると、コントローラが私のコントローラに戻り、そこで検証を行い、次にデータベースにコミットします。

ユーザーが変更せずに[適用]ボタンをクリックするとどうなりますか?私は、コントローラがユーザーによって何も変更されていないことを検出して、適切なメッセージを送信できるようにしたい。

これをモデルステートで検出する方法はありますか?あるいは、これを行う別の方法がありますか?私たちは、ドメインエンティティを取得し、モデルを表示するためにそれらをマッピングするためにautomapperを使用

おかげ

+0

をあなたのデータ層(?EF)は、おそらくあなたのためにそれを行うことができます。 – SLaks

+0

重複を参照してください。http://stackoverflow.com/questions/5934612/in-my-asp-net-mvc-app-how-can-i-determine-if-any-property-in-my-domain-model -has – zszep

答えて

4

。このような何か:

var entity = Repository.Get<DomainEntityClass>(id); 
var mappedEntity = Mapper.Map<DomainEntityClass, ViewModelClass>(entity); 

// code to compare mappedEntity to incoming viewmodel 
// 
// or build an equality comparer to test them 

var viewModel = Mapper.Map<DomainEntityClass, ViewModelClass>(entity); 

次に、ビュー/ページのポストの背面に、我々は再び実体をロードし、マッピングされたビューモデルと比較することで、彼らが異なっているかどうかをテストすることができますマッピングの設定が変更されていない場合、Mapper.Map呼び出し(同じエンティティを指定)は、何も変更されていなければ一致するビューモデルオブジェクトを返す必要があるという考えがあります。ヘルプ建物の等式する比較器については

、ここで確認してください - http://msdn.microsoft.com/en-us/library/ms132151.aspx

+0

+1私から。あなたがこれを投稿したときに私は似たような反応を半分書きました。 – starskythehutch

関連する問題