Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Greenpeace
Implementare ASP.NET MVC nelle applicazioni web (5/6)
Scritto da Fabio Carucci il 05-11-2009 ore 11:34
Intel Parallel Studio XE
Le ultime due puntate sono dedicate ai dati, in particolare al model binding e alla validazione; il model binding è un meccanismo che mappa le richieste dati HTTP nei parametri di un action method.

Nel codice delle puntate precedenti è già presente un tipico utilizzo di model binding:
  1. public ActionResult InsertCustomer(string firstName, string lastName) {...}
Dietro le quinte il Framework MVC utilizza la classe ControllerActionInvoker per invocare i componenti DefaultModelBinder e ValueProviderDictionary, i quali hanno il compito di convertire le richieste in oggetti .NET validi per ciascun parametro passato nell'action method.

E' anche possibile utilizzare un custom type come parametro ed evitare di scrivere troppo codice inutile per valorizzare i membri con i parametri:
  1. public ActionResult InsertCustomer(Customer customer) {...}
In alternativa si può invocare direttamente il model binding, utilizzando il metodo UpdateModel() del controller di base:
  1. public ActionResult InsertCustomer()
  2. {
  3. 	var customer = new Customer();
  4. 	UpdateModel(customer);
  5. 	...
  6. }
Se occorre, è pensabile costruire un model binder personalizzato per particolari esigenze; gli step da seguire riguardano la registrazione, la costruzione del model binder e l'esecuzione; ipotizzate la definizione di un type nel file Global.asax dell'applicazione web e per la precisione nell'Application_Start, quindi dovete effettuarne la registrazione in questo modo:
  1. // Classe tipo da registrare come custom model binder 
  2. public class Customer
  3. {
  4.     public string Name { get; set; }
  5.     public string Address { get; set; }
  6.     public string Mobile { get; set; }
  7. }
  8. ...
  9. ...
  10. // nel file Global.asax
  11. protected void Application_Start()
  12. {
  13.     ModelBinders.Binders[typeof(Customer)] = new CustomerBinder();
  14. }
E ora passate alla costruzione del model binder personalizzato: a tale scopo vi servirà implementare l'interfaccia IModelBinder:
  1. public class CustomerBinder : IModelBinder
  2. {
  3.     public object GetValue(ControllerContext controllerContext,
  4.         string modelName, Type modelType,
  5.         ModelStateDictionary modelState)
  6.     {
  7.         Customer customer = new Customer();
  8.  
  9.         customer.Name = controllerContext.
  10.             HttpContext.Request.Form["Name"];
  11.         customer.Address = controllerContext.
  12.             HttpContext.Request.Form["Address"];
  13.         customer.Mobile = controllerContext.
  14.             HttpContext.Request.Form["Mobile"];
  15.  
  16.         return customer;
  17.     }
  18. }
È così possibile vedere in azione il model binder suddetto, basta passare come parametro la classe Customer nell'action method del controller che vi serve, quindi:
  1. public ActionResult SaveCustomer(Customer customer)
  2. {    
  3. 	...
  4. }
Ovviamente per ragioni di spazio non è tutto qui ciò che potete realizzare con il model binding, per tale motivo vi invito a dare una occhiata ad alcune sane letture.
Precedente: Rete multimediale domestica con DLNA, istruzioni per l'uso (1/2)
Successiva: Developing with Google App Engine
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.262 secondi.