在我的數據庫中,我有40個只包含ID號和名稱的表。我的數據庫使用實體框架進行訪問。雖然我沒有任何困難,通過爲每個對象生成強類型視圖和回發方法來編輯它們,我想創建一個更通用的方法和視圖來查看和編輯這些對象。使用ASP.NET,MVC和實體框架創建通用編輯視圖
我正在使用下面的代碼來訪問每個對象。在這種情況下,它是「地址類型」的對象:
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」是強類型和工作正常,但有很多重複的代碼(每個對象的這一個實例)。我被告知我需要使用反射,但是我對如何實現這一點不知所措。我的理解是我需要檢索對象類型,以便可以將硬編碼引用替換爲對象,但我不確定如何從回發中獲取此信息。
我已經成功地將信息綁定到控制器中的ViewData並將其傳遞給知道查找此ViewData的ViewPage視圖,但我不知道如何將更改回發給控制器。
感謝您給我的任何幫助!
這看起來很有前途。我一定會盡量讓我的程序更加RESTful。然而,我仍然不知道如何使它更通用,因此它可以更新AddressType之外的對象,比如UserType或EventType,它們也具有ID和Name組件。我試圖避免像AddressController或AddressType這樣的硬編碼,因爲當我想更新UserType時,我將使用完全相同的代碼,除了AddressType的所有實例都將被UserType替換。 – JimF 2010-12-14 22:05:05
在上面顯示的Update方法中,我無法保存地址,因爲在傳遞給視圖時丟失了原始數據庫上下文。我嘗試使用_repository.Attach(地址)來重新應用其數據上下文,但會引發異常。這是我回到數據庫以獲取原始AddressType對象的原始原因,爲了使對象具有執行UpdateModel(...)所需的上下文 – JimF 2010-12-15 02:20:34