2013-10-16 56 views
0

我正在使用asp.net mvc和Entity Framwork。我仍然熟悉這個堆棧。我想包含與傳遞給視圖的模型沒有外鍵關係的數據。在視圖模型中包含無關數據

最初,該模型被傳遞給這樣的觀點...

public ActionResult Edit(int id = 0) 
{ 
booking booking = db.bookings.Find(id); 
return View(booking); 
} 

我需要在視圖中沒有與預訂一FK關係的數據。

我試圖創建一個單獨的類把兩個實體的...

public ActionResult Edit(int id = 0) 
{ 
booking booking = db.bookings.Find(id); 
viewModel.bookingtraces = (from l in db.traces where l.bookingid == booking.bookingid  select l); 
viewModel.bookings = booking; 
return View(viewModel); 
} 

目前,我得到一個錯誤,這個雖然。一開始頁面將加載,但嘗試更新的時候,我得到

Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries. 

我也嘗試添加一個條目構建器明確定義的關係,但沒有奏效。

最終,問題是,如果兩個實體之間沒有FK關係,我如何在視圖中訪問不是要傳遞的模型的一部分的數據?

+0

你可以通過viewbag也 – Miller

+0

感謝米勒。我需要能夠調用保存預訂跟蹤,ViewBag不允許據我所知。 – tintyethan

+0

您是否嘗試過在查詢後添加.ToArray()? IMO應該在控制器中填充視圖模型,而不是等待視圖執行以便查詢運行 – MikeSW

回答

1

我會建議您不要簡單地使用實體類作爲您的模型,而是研究創建包含您需要的屬性的複合模型(我通常在基本視圖模型中實現常見功能,並從中繼承)。通過這種方式,您可以完全控制模型對象的實例化以及它們包含的屬性。 通過這種方式,當您回發郵件時,整個模型會回發到服務器。複合模型的

一個優點,將包括一個單一的模型內的許多實體或POCO對象的能力,例如:被回發

public class MyModel { 
    public booking Booking {get;set;} 
    public SomeOtherEntityObject EObject{get;set;} 
    public SomePocoObject {get;set;} 
} 

這些將隨後意味着模型的全部內容到服務器。

1

您可以可以使用您的實體模型,並通過額外的數據視圖通過ViewBag

public ActionResult Edit(int id = 0) { 
    Booking booking = db.bookings.Find(id); 
    ViewBag.bookingtraces = 
     from l in db.traces 
     where l.bookingid == booking.bookingid 
     select l; 
    return View(booking); 
} 

OR

您可以定義視圖模型

public class MyViewModel { 
    public Booking booking { get; set; } 
    public IEnumerable<BookingTrace> traces { get; set; } 
} 

,然後在您的行動方法中,您可以只綁定預訂屬性

[HttpPost] 
public ActionResult Edit(Booking booking) { 
    ... 
} 
相關問題