問題タブ [partialviews]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
entity-framework - オートマッパーを使用してクラスをそれ自体にマッピングすることは、大きなビューを分割するための良い解決策になりますか?
多くのプロパティとナビゲーション フィールドを持つかなり長いモデル クラスがあります。
ビューを分割するために (そしてビジネス ロジックでそれが必要です)、このクラスのプロパティのサブセットを持つ約 14 の部分ビューを作成し、ページの読み込み時に対応する部分ビューをメインの編集ビューに読み込みます。コメント) 別のビューでは、リンクがクリックされると、コントローラーに渡された CustomerID パラメーターを使用して編集 GET アクションが呼び出され、コントローラーは、このような対応するパーシャルビューで編集ビューをロードします
ここで、これらのプロパティのサブセットを持つ 14 個の部分ビューのそれぞれに対して 14 個の ViewModel を作成したくありません。私がやりたかったのは、1 つの大きな ViewModel を使用し、automapper を使用してビューに読み込まれるプロパティを管理し (メインと部分の両方から)、Model クラスのすべてのプロパティを複製 (コピーして貼り付け) することなく、これらの特定のプロパティをマップすることです。 CustomersViewModel に。
試行 1:
クラスをそれ自体にマップしようとしましたが、外部キーの値/データベースの関係をいじって逆火しました-エラーメッセージは、「外部キーのプロパティの1つ以上がnull不可であるため、関係を変更できませんでした.. ..」。次に、 .ForAllMembers(opt=>opt.Ignore()) を追加すると、面倒になりました。
試行 2: では、14 個の部分ビューを作成せず、automapper を使用してすべてのプロパティをコピー アンド ペーストせずに回避する別の方法だと思ったのは、次のようなものでした。
その後、マップと逆マップ
GET コントローラー
次に、POST メソッド
しかし、マッピングがエラーなしでうまくいき、GET がビューをロードし、POST が変更された値を受け取ったとしても、db.SaveChanges(); 変更された値を受け取りません更新は行われません。
ただし、Model クラスからすべてのプロパティをコピーして ViewModel にコピーすると、オートマッパーによるマッピングが機能し、ビューのデータが保存されます
私の質問は、モデル クラスのすべてのプロパティを再度一覧表示せずに、1 つの大きな ViewModel でこれを行う方法はありますか? ご提案いただきありがとうございます。