1

プロパティの 1 つが編集可能なエンティティである編集フォームでの ViewModel の使用について混乱しています。

ViewModel
   Entity
   Actions

ビュー ページの上部にあるモデルの宣言:

   @model MyProject.Models.ViewModel

いいえ

   @model MyProject.Models.Entity

では、更新が必要なエンティティ プロパティを表す最善の方法は何でしょうか。私は最初にそれから変数を作り始めました。

Entity myEntity = ViewModel.Entity;

したがって、各フォーム要素の編集フィールドは次のように表すことができます。

@Html.EditorFor(model => myEntity.Name)

しかし、post アクションの Model Binding パラメーターはどうなるでしょうか?

    [HttpPost]
    public ActionResult Edit(Entity myEntity)

            db.Entities.Attach(myEntity);
            db.ObjectStateManager.ChangeObjectState(myEntity, EntityState.Modified);
            db.SaveChanges();

したがって、この質問は、単純なモデルとして渡すことができる特定のエンティティ オブジェクトとは対照的に、ViewModel で編集可能なプロパティ オブジェクトを処理する方法に関するものです。

おそらく簡単に答えてください。

よろしくお願いします。

編集:

View 内の ViewModel からドメイン オブジェクトを参照する方法に関するフィードバック。ラムダ式でそれらを直接参照すると、派生 ID を使用して返された ViewModel をナビゲートできるため、モデル バインディングが正常に機能することがわかりました。ビューでローカル変数を使用すると、この変数名が Id で使用され、ViewModel モデル バインディング マッピングが壊れます。

4

1 に答える 1

2

POST アクションは、ドメイン モデルではなく、ビュー モデルをパラメーターとして使用する必要があります。

[HttpPost]
public ActionResult Edit(ViewModel viewModel)

次に、この viewModel の ID を使用して、更新が必要なデータベースから対応するドメイン モデルを取得する必要があります。次に、このドメイン モデルのプロパティをビュー モデルから更新します。最後に、ドメイン モデルをデータベースに永続化します。

于 2013-06-05T11:00:51.057 に答える