2011-10-03 21 views
5

En MVC2 solía crear vistas fuertemente tipadas de manera que cuando publiqué nunca utilicé el objeto FormCollection. Mis firmas siempre se veía así:TryUpdateModel contra el parámetro del método fuertemente tipado

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

Pero ahora que estoy viendo esta nueva forma TryUpdateModel donde me acaba de escribir algo como:

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

Así que ahora parece que tengo para burlarse de la HttpContext para probar este método Sin embargo, parece que todavía puedo usar la forma anterior usando métodos muy tipados. Me doy cuenta de que el método TryUpdateModel es una mejora para aquellos que usarían el método FormCollection de hacer las cosas, pero ¿por qué molestarse con TryUpdateModel?

Respuesta

2

Hay casos en que esto es deseable. Un buen ejemplo es cuando su modelo requiere una inicialización más compleja o un método de fábrica para crear.

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

Ahora se podría argumentar que un ModelBinder personalizado es una solución mejor aquí, pero que podría ser más esfuerzo que vale la pena si esto es un fuera de situación. Además, ocultar este detalle en un ModelBinder hace que los errores sean más difíciles de depurar.

Hay otras situaciones que estoy seguro, pero esto es solo un ejemplo rápido.

2

Algunos también usan ese método cuando primero tiene que cargar información en una entidad y fusionar sus valores para fines de validación. Sin embargo, podría utilizar Automapper en estos casos, pero algunas empresas prohíben el código fuente abierto.

Yo diría que casi nadie usa FormCollection en una aplicación bien diseñada.

Cuestiones relacionadas