2014-10-22 28 views
0

在項目中,我有一個模型MVC 4通行證對象

 Product (int int, String description, decimal price) 

我也有另一種模式

 Order (int id, virtual Product product, String customerName) 

通過產品之前添加虛擬的,該產品是一個外鍵。 我希望能夠下訂單,但是如何將對象產品傳遞給下訂單的形式。

可以說,用戶首先通過點擊按鈕購買從列表中選擇產品,然後他必須輸入他的名字(以保持簡單)。 我應該如何將產品添加到輸入您的姓名錶格中?

我嘗試用「

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create(Order order) 
    { 
     order.ConnectedProduct = db.Products.Find(1); 
     if (ModelState.IsValid) 
     { 
      db.Orders.Add(order); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(order); 
    } 

(選擇產品後,從添加名稱形式)manualy它添加到我的後處理程序,但這仍然會返回所需的字段ConnectedProduct。(debbuging顯示有是一個選定的產品)

回答

1

ModelState保存了運行在管道中較早的ModelBinder的狀態,因此ModelState.IsValid向您顯示了模型綁定+驗證的結果,它比代碼早在您的控制器中執行。您將對象的狀態設置爲va通過添加產品蓋子不會改變以前的結果。

我建議你創建一個視圖模型(不同於你的域模型)傳遞給控制器​​和視圖,然後可以將其映射到控制器中的域模型。有一些有用的工具可以幫助你減少鍋爐板代碼。受歡迎的選項(不按字母順序排列)是AutomapperValueInjecter