2010-01-28 3 views
8

현재 새 ASP.NET MVC2 프레임 워크로 응용 프로그램을 개발 중입니다. 원래 ASP.NET MVC1에서이 응용 프로그램을 작성하기 시작했으며 기본적으로 MVC2로 업데이트하고 있습니다.ASP.NET MVC2 Create 메서드에서 FormCollection을 사용하는 올바른 방법은 무엇입니까?

여기 내 문제는 FormCollection 개체와 이전 Typed 개체의 개념이 다르다는 것입니다.

이 내 현재 코드입니다 :

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(FormCollection collection) 
{ 
    try 
    { 
     Member member = new Member(); 
     member.FirstName = collection["FirstName"]; 
     member.LastName = collection["LastName"]; 
     member.Address = collection["Address"]; 

     // ... 

     return RedirectToAction("Details", new { id = member.id }); 
    } 
    catch 
    { 
     return View("Error"); 
    } 
} 

이것은 MVC1 응용 프로그램에서 코드입니다 :

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(Member member) 
{ 
    try 
    { 
     memberRepository.Add(member); 
     memberRepository.Save(); 

     return RedirectToAction("Details", new { id = member.id }); 
    } 
    catch 
    { 
    } 
    return View(new MemberFormViewModel(member, memberRepository)); 
} 

더 중요한 MVC2에 FormCollection로 전환하고의 장점은 무엇인가 - 그것은 어떻게 제대로 사용 되었습니까?

+0

아무 것도 아니며 오래된 모델이 고장 났습니까? 왜 전환해야하나요? – mxmissile

+0

아니 깨진 아니에요 .. 새로운 컨트롤러가 강하게 입력 된 개체 대신 FormCollection 함께 제공되는 것처럼 오래된 모델 강력하게 형식화 된 접근 방식을 포기한 것처럼 보였다. –

답변

11

v1에도 FormCollection 개체가 있습니다. 그러나 유형이 지정된 객체를 사용하는 것이 더 바람직합니다. 그래서 이미 그렇게하고 있다면 계속 그렇게하십시오.

+1

+1 예, 처음부터 FormCollection이있었습니다. 파손되지 않은 경우 고치지 마십시오! –

0

FormCollection을 사용하면 게시 데이터 또는 쿼리 문자열 키/값을 문자열 입력 (결과적으로 문자열 형식의 코드 사용)을 사용하여 코드에 사용할 값으로 수동으로 매칭 할 수 있습니다. 대신 내장 모델 바인딩에서 형식 모델, 일명 "유형이 지정된 개체"를 사용하는 경우이 작업을 수행하십시오.

FormCollection을 사용하면 입력 된 개체 모델 바인딩과 함께 사용하도록 디자인 된 모델 개체에도 편리한 Data Annotation (슬래시 유효성 검사) 특성을 사용할 수있는 기능이 손실 될 수 있습니다.

또한 컨트롤러를 만지기 시작하면 단위 테스팅이 훨씬 번거로워 질 수 있습니다. 요청. 양식. HttpContextBase와 HttpRequestBase를 모의하고 설정해야만 모의 요청의 .Form 속성이 테스트를 보려는 NameValueCollection을 반환하도록 할 수 있습니다. 바인딩 모델을시키는에 명암이는 등의 작업을 수행합니다

// Arrange 
    var myModel = new MyModel(Property1 = "value1", Property2 = "value2"); 
    // Act 
    var myResult = myController.MyActionMethod(myModel); 
    // Assert 
    // whatever you want the outcome to be 

요약하면, 나는 가능한 한 최대로 FormCollection를 사용에 대해 추천 할 것입니다.

관련 문제