次の[HttpPost]
ようなアクション メソッド シグネチャがあります。
[HttpPost]
public ActionResult Edit(ExistingPostViewModel model)
{
// Save the edited Post.
}
さて、過去に(R&DなどのViewModelを使用していなかったとき)、次のようなEditメソッドの実装がありました:
[HttpPost]
public ActionResult Edit(Post model)
{
var existingPost = repo.Find(model.Id);
TryUpdateModel(existingPost);
repo.Save(existingPost);
return RedirectToAction("Success", existingPost.Id);
}
これはうまくいきました。
しかし、上記をViewModelアプローチに適応させる方法がわかりません。
私がこれを行う場合:
TryUpdateModel(existingPost)
私の ViewModel アプローチでは、あまり起こりません。Post
エラーはありませんが、MVC は aから aを更新する方法がわからないため( ->ExistingPostViewModel
になる前)、何も更新されていません。Post
Post
今、私は AutoMapper を使用しています。したがって、ViewModel から にマップしてPost
、投稿を保存できると考えました。
しかし、基本的にすべてをオーバーライドします。これはやりたくないことであり、ビューモデルのカットダウンのポイントを無効にします。
誰でも私を混乱させることができますか?
これは非常に一般的なシナリオのように思えます。人々がこれをどのように解決するかについて、私は完全に困惑しています。考えられる解決策は 3 つしかありません。
HTTP POST で ViewModel を使用しないでください。私が言ったように、私は過去に研究開発のためにこれを行い、それは機能しましたが、今では私のビューがどのように進化したか (検証、シンプルさ) がわかり、この問題のためだけにそれを妥協することはできません.
TryUpdateModel を使用しないでください。おそらくですが、どうすれば変更をマージできますか?
左から右に使用します。うーん。しかし、現時点では、これが私が傾いている方法のようです。
誰か私に解決策#4を教えてください!:)
ところで、私は ASP.NET MVC 3、Razor、および Entity Framework を使用しています。