2014-10-22 2 views
0

은 내가 또한 제품 전에 가상을 추가하여 다른 모델MVC 4 패스 개체

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

이 모델을

 Product (int int, String description, decimal price) 

이 제품은 외래 키입니다. 나는 주문을 할 수 있기를 원하지만 어떻게 물건을 물건을 주문하는 형태로 전달할 수 있습니까?

사용자는 먼저 버튼 구매를 클릭하여 목록에서 제품을 선택하고 나면 이름을 입력해야합니다 (간단하게 유지). 이름 입력 양식에 제품을 어떻게 추가해야합니까?

나는 "

[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); 
    } 

를 사용하여 (제품을 선택한 후 추가 이름 양식에서) 내 게시물 핸들러에 수동으로 실시를 추가하려고하지만 여전히 필드 ConnectedProduct이 필요 돌아갑니다. (이 쇼를 debbuging

답변

1

ModelState는 파이프 라인의 앞 부분에서 발생하는 ModelBinder 실행 상태를 유지하므로 ModelState.IsValid는 모델 바인딩 + 유효성 검사 결과를 코드보다 먼저 표시합니다. 귀하의 컨트롤러에서 실행됩니다. 사실은 당신이 개체의 상태를 VA 제품을 추가하여 덮개를 열었더라도 이전 결과는 변경되지 않습니다.

컨트롤러의 도메인 모델에 매핑 할 수있는 컨트롤러와 뷰로주고받는 뷰 모델 (도메인 모델과 다름)을 만드는 것이 좋습니다. 보일러 플레이트 코드를 줄이기 위해 많은 매핑을 수행하는 데 유용한 도구가 있습니다. 인기있는 옵션 (알파벳순보다 다른 순서는 없음)은 AutomapperValueInjecter입니다.