2010-01-28 14 views
8

Obecnie rozwijam aplikację z nowym środowiskiem ASP.NET MVC2. Oryginalnie zacząłem pisać tę aplikację w ASP.NET MVC1 i po prostu aktualizuję ją do MVC2.Właściwy sposób korzystania z FormCollection w ASP.NET MVC2 Metoda tworzenia?

Mój problem polega na tym, że naprawdę nie pojmuję pojęcia obiektu FormCollection w porównaniu do starego obiektu Typed.

To jest mój bieżący kod:

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

Jest to kod z zastosowania 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)); 
} 

Jakie są korzyści z przejścia na FormCollection w MVC2, a co ważniejsze - jak to jest właściwie używane?

+0

Nie widzę, czy stary model jest zepsuty? Po co się przełączać? – mxmissile

+0

Nie, to nie jest zepsute. Wyglądało na to, że stary model został mocno porzucony, ponieważ nowe kontrolery mają FormCollection zamiast silnie wpisanego obiektu. –

Odpowiedz

11

Masz również obiekt FormCollection w wersji v1. Ale bardziej preferowane jest użycie wpisanego obiektu. Więc jeśli już to robisz, kontynuuj to.

+1

+1 Tak, Kolekcja FormCollection istnieje od początku. Jeśli nie jest zepsuty, nie naprawiaj go! –

0

Korzystając z FormCollection, kończysz ręcznie dopasowując dane do wpisu lub klucz/wartości ciągu zapytania do wartości, które będą używane w kodzie za pomocą pisania ciągiem znaków (co będzie skutkować ciągłym wpisywaniem kodu), podczas gdy wbudowane powiązanie modelu może zrób to dla ciebie, jeśli użyjesz modeli formularzy, inaczej "wpisanych obiektów".

Myślę, że przy użyciu FormCollection, prawdopodobnie utracisz również możliwość korzystania z przydatnej atrybuty Data Adnotation (slash Validation) również na obiektach modelu, które są zaprojektowane do użycia z typowym wiązaniem modelu obiektowego.

Ponadto testowanie jednostek może stać się znacznie bardziej kłopotliwe po dotknięciu kontrolera. Request.Form. Może się okazać, że będziesz musiał kpić i ustawiać HttpContextBase i HttpRequestBase tylko po to, aby właściwość .Form tego żądania fałszywego zwróciła wartość NameValueCollection, której test chcesz zobaczyć. Porównajmy to do modelu wiązania pozwalając wykonać pracę dla Ciebie, takie jak:

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

Podsumowując, polecam przed użyciem FormCollection aby w maksymalnym stopniu.

Powiązane problemy