2011-10-03 5 views
5

MVC2에서는 게시 할 때 강력하게 형식화 된 뷰를 만들 때 FormCollection 개체를 사용하지 않았습니다. 내 서명이 항상처럼 보였다 :TryUpdateModel 대 강력한 형식의 메서드 매개 변수 대

[AcceptVerbs(HttpVers.Post)] 
public Create(Person newPerson) 
{ 
//code to update the person from the post 
} 

하지만 지금 난 그냥 같은 것을 작성합니다 새로운 TryUpdateModel 방법보고 있어요 :

[AcceptVerbs(HttpVers.Post)] 
    public Create() 
    { 
     Person thePersonToCreate = new Person() 
     TryUpdateModel(thePersonToCreate) 
     { 
      //Code to create the person if model is valid 
     }  
    } 

것은 그래서 지금은 내가 모의해야 할 것 같습니다 HttpContext를 이 메소드를 테스트하기 위해서. 그러나 강력한 형식의 메서드를 사용하여 이전 방법을 사용할 수있는 것처럼 보입니다. TryUpdateModel 메서드는 작업을 수행하는 FormCollection 메서드를 사용하지만 TryUpdateModel을 사용해야하는 이유는 무엇인지 깨달았습니다.

답변

2

이것이 바람직한 경우가 있습니다. 좋은 예는 모델에서보다 복잡한 초기화 또는 생성 할 팩토리 메소드가 필요한 경우입니다.

[AcceptVerbs(HttpVers.Post)] 
public Create() 
{ 
    var dataAccess = new MyDataAccess("Another Param"); 
    Person thePersonToCreate = new Person(dataAccess); 

    TryUpdateModel(thePersonToCreate) 
    { 
     //Code to create the person if model is valid 
    }  
} 

지금 하나는 사용자 정의 ModelBinder를 더 나은 솔루션이 여기에 있다고 주장 수도 있지만, 이것은 일회성 상황 인 경우가 가치보다 그것이 더 많은 노력 수 있습니다. 또한 ModelBinder에서이 세부 정보를 숨기면 오류를 디버그하기가 더 어려워집니다.

다른 상황이있을 수 있지만 이는 간단한 예일뿐입니다.

2

일부는 엔티티에 정보를 먼저로드하고 유효성 검사를 위해 값을 병합해야하는 경우에도이 방법을 사용합니다. 그러나 이러한 경우에는 automapper를 사용할 수 있지만 일부 회사는 오픈 소스 코드를 금지합니다.

저는 잘 설계된 응용 프로그램에서 FormCollection을 사용하는 사람은 거의 없습니다.