私のデータベースには、ID番号と名前のみを含む40のテーブルがあります。私のデータベースには、Entity Frameworkを使用してアクセスします。私は強く型付けされたビューと各オブジェクトのポストバックメソッドを生成することによってそれぞれを編集するのに問題はありませんが、これらのオブジェクトの表示と編集のためのより一般的なメソッドとビューを作成したいと思います。ASP.NET、MVC、およびEntity Frameworkを使用した汎用編集ビューの作成
現在、次のコードを使用して各オブジェクトにアクセスしています。
public ActionMethod EditAddressType(int ID)
{
var result = database.AddressType.Single(a => a.ID == ID);
View(result);
}
[HttpPost]
public ActionMethod EditAddressType(int ID, FormCollection formValues)
{
var result = database.AddressType.Single(a => a.ID == ID);
UpdateModel(result);
database.SaveChanges();
return View("SaveSuccess");
}
ビュー「EditAddressType」は強く型付けされ、正常に動作しますが、繰り返しコード(オブジェクトごとに、この1つのインスタンス)がたくさんあります。この場合、それはAddressTypeに "のオブジェクトのためです。私はリフレクションを使う必要があると言われてきましたが、私はこれを実装する方法を失っています。私は、ハードコードされた参照をオブジェクトに置き換えることができるようにオブジェクトタイプを取得する必要があることを理解していますが、この情報をポストバックから取得する方法はわかりません。
私はコントローラのViewDataに情報をバインドして、このViewDataを探すことを知っているViewPageビューに渡したが、コントローラに変更をポストバックする方法がわからない。
ご協力いただきありがとうございます!
これは有望です。私は確かに私のプログラムをよりリーズナブルにしようとします。しかし、私はまだこれをより一般的なものにする方法が失われているので、UserTypeやEventTypeのようなAddressType以外のオブジェクトを更新することができます。これにはIDとNameコンポーネントもあります。 UserTypeを更新する場合、AddressTypeのすべてのインスタンスがUserTypeに置き換えられる以外は、まったく同じコードを使用するため、AddressControllerやAddressTypeなどのハードコーディングを避けようとしています。 – JimF
上記のUpdateメソッドでは、ビューに渡すときに元のデータベースコンテキストを失うため、アドレスを保存できませんでした。 _repository.Attach(アドレス)を使用してデータコンテキストを再適用しようとしましたが、例外がスローされます。これが元のAddressTypeオブジェクトを取得するためにデータベースに戻った理由、UpdateModel(...)を実行するために必要なコンテキストを持つオブジェクトを持つことの元の理由でした – JimF