2009-10-23 7 views
3

Je me demandais s'il existait un moyen de lier des valeurs de formulaire passées dans un contrôleur ayant des ID différents des propriétés de classe. Le formulaire publie sur un contrôleur avec Person en tant que paramètre ayant un nom de propriété mais la zone de texte du formulaire a l'ID de PersonName au lieu de Name.Lier formValue à une propriété de nom différent, ASP.NET MVC

Comment puis-je lier cela correctement?

Répondre

3

Ne vous embêtez pas avec cela, il suffit d'écrire une classe PersonViewModel qui reflète la même structure que votre formulaire. Ensuite, utilisez AutoMapper pour le convertir en Person.

public class PersonViewModel 
{ 
    // Instead of using a static constructor 
    // a better place to configure mappings 
    // would be Application_Start in global.asax 
    static PersonViewModel() 
    { 
     Mapper.CreateMap<PersonViewModel, Person>() 
       .ForMember(
        dest => dest.Name, 
        opt => opt.MapFrom(src => src.PersonName)); 
    } 

    public string PersonName { get; set; } 
} 

public ActionResult Index(PersonViewModel personViewModel) 
{ 
    Person person = Mapper.Map<PersonViewModel, Person>(personViewModel); 
    // Do something ... 
    return View(); 
} 
3

Vous pouvez avoir votre propre modèle de classeur pour ce modèle.

public class PersonBinder : IModelBinder { 
    public object BindModel(ControllerContext controllerContext, 
     ModelBindingContext bindingContext) { 
      return new Person { Name = 
        controllerContext.HttpContext.Request.Form["PersonName"] }; 
    } 
} 

Et votre action:

public ActionResult myAction([ModelBinder(typeof(PersonBinder))]Person m) { 
     return View(); 
} 
Questions connexes