2011-10-03 27 views
5

In MVC2 ho usato per creare una vista fortemente tipizzati in modo che quando ho postato, non ho mai usato l'oggetto FormCollection. Le mie firme sembravano sempre in questo modo:TryUpdateModel vs. parametro del metodo fortemente tipizzato

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

Ma ora sto vedendo questo nuovo modo TryUpdateModel in cui vorrei solo scrivere qualcosa di simile:

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

Così ora sembra che devo mock up del HttpContext per testare questo metodo. Tuttavia, sembra che posso ancora usare la prima maniera usando metodi fortemente tipizzati. Mi rendo conto che il metodo TryUpdateModel è un miglioramento per coloro che utilizzano il metodo FormCollection per fare le cose, ma perché preoccuparsi di TryUpdateModel?

risposta

2

Ci sono casi in cui questo è auspicabile. Un buon esempio è quando il modello richiede un'inizializzazione più complessa o un metodo factory da creare.

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

Ora si potrebbe sostenere che un ModelBinder personalizzato è una soluzione migliore qui, ma che potrebbe essere più sforzo che vale la pena se si tratta di un'una tantum situazione. Inoltre, nascondere questo dettaglio in un ModelBinder rende più difficile il debug degli errori.

Non ci sono altre situazioni che sono sicuro, ma questo è solo un esempio veloce.

2

Alcuni anche utilizzare questo metodo quando si deve caricare le informazioni in un'entità prima e unire i valori per la convalida. In questi casi, tuttavia, è possibile utilizzare semplicemente l'automapper, ma alcune società vietano il codice open source.

direi quasi nessuno usa FormCollection in un'applicazione ben architettato.

Problemi correlati