2012-12-08 2 views
1

이해하는데 도움이 필요합니다.하나 또는 둘 이상의 모델 바인더 모두를 다룰 수있는 모델 바인더?

모델 바인딩이 내 ASP 컨트롤러에서 사용되는 것이 가장 좋은 방법을 알고 싶습니다. 기본적으로 내 세션에서 마스터 객체 (장바구니)에 대한 참조를 원하고 사용자가 요청한 양식으로 모델 (editingModel1)을 편집합니다.

기본적으로이 같은 클래스있는의 생각 : 나는 사용자가 editingModel2 같은 다른 것은 상호 작용하려면

public class customModelBinder : IModelBinder { 
     private const string sessionKey = "Cart"; 

     public object BindModel(ControllerContext controllerContext, 
      ModelBindingContext bindingContext) { 

      // get the Cart from the session 
      Cart cart = (Cart)controllerContext.HttpContext.Session[sessionKey]; 
      // create the Cart if there wasn't one in the session data 
      if (cart == null) { 
       cart = new Cart(); 
       controllerContext.HttpContext.Session[sessionKey] = cart; 
      } 
      // return the cart 
      return cart; 
     } 
    } 

을이

 public ActionResult Edit(int id, Cart cb) 
     { 
      Company c = _companyProvider.Read(id); 
      cb.editingModel1 = c 
      return View(c); 
     } 

처럼 내 컨트롤러에서 사용해야 나도 장바구니에 넣는다

희망이 나의 문제를 설명한다!

어떤 도움을 주셔서 감사합니다.

답변

0

저는 맞춤 모델 바인더를 포기할 것입니다. 강력한 형식의 Html.____For 컨트롤과 결합 된 ASP.NET의 기본 모델 바인더는 매우 강력하므로 이점을 활용해야합니다.

Cart은 본질적으로 일부 메타 데이터가 포함 된 클래스로 래핑 된 목록이라고 가정합니다. 내가 할 일은 형식을 포함하는 강력한 형식의 뷰를 만들고 관심있는 데이터가 들어있는 객체를 편집하는 for 컨트롤을 만드는 것입니다.이 객체 유형을 MyItem이라고합시다. 그런 다음 양식을 MyItem 유형의 매개 변수를 사용하는 컨트롤러에 제출하십시오. 이 매개 변수는 양식의 데이터로 채워집니다. 그런 다음 Session 변수를 사용하여 cart 개체에 액세스하고 MyItem 개체의 개체에 액세스 할 수 있습니다.

전체적으로 이것은 거의 로직이 필요하지 않습니다. 대부분의 로직은 MVC 프레임 워크로 바로 구워집니다. 아키텍처에 따라 헬퍼 클래스를 사용하여 컨트롤러에서 처리하고 모델 바인딩에 대한 걱정을 MVC에 남겨 둡니다.


숨겨진 필드를 사용하지 마십시오. 너는 필요 없어. MVC에 Session 변수가있을 때, 마치 단일 사용자의 단일 세션 인 것처럼 본질적으로 MVC에서 작업 중임을 이해할 수 없을 것입니다. 코드 Session["MyCart"]을 사용하여 세션에서 장바구니에 액세스하면 해당 코드를 실행하는 사용자가 장바구니에 자동으로 액세스 할 수 있습니다. 이는 세션 단일성이 MVC에 의해 안전한 방식으로 자동 관리되기 때문입니다. 개발자는 사용자가 서버 측 항목에 액세스하는 것에 대해 걱정할 필요가 없습니다. 세션에 넣기 만하면 나머지는 MVC가 처리하여 사용자가 속한 세션 데이터에 액세스 할 수있게합니다.

+0

안녕하세요! 내가 Cart를 사용하는 모델 바인더에 대해 좋아했던 것은 컨트롤러에서 즉시 액세스 할 수 있었고 ID와 같은 추가 변수를 Html.For의 물건으로 클라이언트에 전달할 필요가 없었기 때문입니다. – Nikos

+0

접근 방식 숨겨진 필드를 사용하여 처음에 내가했던 일이었습니다. – Nikos

+0

MVC가 세션을 관리하는 방법을 잘못 이해 한 것 같습니다. 업데이트 된 답변보기 –

관련 문제