Oggi alla MiniConf di UgiAlt, che devo dire mi è piaciuta molto, ho esposto un "problema" legato alla versione corrente di Asp.NET MVC riguardante il DataBind in fase di post su una action, so di non essere stato molto chiaro, era un problema che avevo notato quando ho messo per la prima volta le mani su Asp.NET Mvc di cui mi ero praticamente dimenticato (certo, forse sono stato comunque più chiaro io dei Font utilizzati da Simone durante la sua sessione :) ).

Partiamo da un esempio semplicissimo, tra i nostri model abbiamo i seguenti:

public class Person
{
   public string Name {get; set;}
   public string Surname { get; set; }
   public AddressInfo Address{ get; set;}
}

public class AddressInfo
{
   public string City {get; set;}
   public string ZipCode {get;set;}
}

e supponiamo di avere una vista il cui output è il seguente:

<form id='form1' action='/Person/Save' method='post'>
  <input type='text' id='person_Name' name='person.name'/>
  <input type='text' id='person_Surname' name='person.surname'/>
  <input type='text' id='person_Address_City' name='person.Address.City'/>
  <input type='text' id='person_Address_ZipCode' name='person.Address.ZipCode'/>
  <input type='submit' value='submit'/>
</form>

Monorail:

public class PersonController
{
  public void create([DataBind("person")] Person p)
  {
    // tutte le proprietà di person sono valorizzate, quindi p.Address.CityInfo
    // restituisce il valore postato dalla from
    // nel campo person.Address.CityInfo
  }
}

Asp.NET MVC con MvcToolkit

public class PersonController : Controller
{
  [ControllerAction]
  public void create()
  {
    Person p = new Person();
    p.UpdateFrom(Request.Form,"person");
    // sono valorizzate solo le proprietà di "primo livello"
    // name e surname sono correttamente valorizzate
    // ma Address == null
  }
}

Adesso spero sia tutto più chiaro, non esiste, a quanto ne so, un modo semplice e "immediato" per effettuare un binding "intelligente" dalla form postata ad un oggetto POCO.

Technorati Tags: ,,