2011-06-02 16 views
7

que tienen la siguiente acción para mostrar un formulario con 3 artículos:¿Cómo vinculo una colección (IEnumerable) de un tipo personalizado?

[HttpGet] 
    public ActionResult ReferAFriend() 
    { 
     List<ReferAFriendModel> friends = new List<ReferAFriendModel>(); 
     ReferAFriendModel f1 = new ReferAFriendModel(); 
     ReferAFriendModel f2 = new ReferAFriendModel(); 
     ReferAFriendModel f3 = new ReferAFriendModel(); 

     friends.Add(f1); 
     friends.Add(f2); 
     friends.Add(f3); 
     return View(friends); 
    } 

y luego una acción posterior

[HttpPost] 
    public ActionResult ReferAFriend(IEnumerable<ReferAFriendModel> friends) 
    { 
     if(ModelState.IsValid){ 

EDIT Mi vista se parece a esto:

@model IEnumerable<Models.ReferAFriendModel> 
@for(int i=0;i<Model.Count();i++) 
    { 
     @Html.Partial("_ReferAFriend", Model.ElementAt(i)); 
    } 

El parcial se ve así:

Cuando publico, puedo ver que los campos se publican en el objeto Request.Form, por ejemplo Request.Form ["FullName"] mostrará: "David Beckham", "Thierry Henry". "Chicharito Fergurson", que son los valores que ingresé en el formulario. Pero, en la acción Post, el valor de 'amigos' siempre es nulo. El ReferAFriendModel tiene tres propiedades públicas Id, EmailAddress y FullName.

¿Qué estoy haciendo mal?

+0

Probablemente algo mal con su forma/vista. Deberías mostrar ese código. – RPM1984

+0

Posible duplicado de [¿Cómo pasar la lista de IEnumerable al controlador en MVC, incluido el estado de la casilla de verificación?] (Http://stackoverflow.com/questions/17037858/how-to-pass-ienumerable-list-to-controller-in-mvc- including-checkbox-state) – abatishchev

Respuesta

9

Puede echar un vistazo al following blog post sobre el formato de cable para matrices y diccionarios. Personalmente siempre utilizo plantillas de editor en mis vistas que se encargan de generar nombres propios de los campos de entrada para que el enlazador de modelo predeterminado pueda vincular los valores correctamente.

@model IEnumerable<ReferAFriendModel> 
@using (Html.BEginForm()) 
{ 
    @Html.EditorForModel() 
    <input type="submit" value="OK" /> 
} 

y en el editor de plantillas correspondientes (~/Views/Shared/EditorTemplates/ReferAFriendModel.cshtml):

@model ReferAFriendModel 
@Html.EditorFor(x => x.Prop1) 
@Html.EditorFor(x => x.Prop2) 
... 
+2

Justo lo que quería, estaba usando un tutorial de MVC2 que me llevó por el camino equivocado. Gracias – robasta

Cuestiones relacionadas