2012-09-06 38 views
8

Aquí está mi modelo:lista de ASP.NET MVC modelo de unión

public class Items 
    { 
     public string Foo { get; set; } 
     public string Bar { get; set; } 
    } 

controlador:

public ActionResult Index() 
    { 
     var model = new List<Items> 
         { 
          new Items 
           { 
            Foo = "foo", 
            Bar = "bar" 
           }, 
          new Items 
           { 
            Foo = "ai", 
            Bar = "ia" 
           }, 
          new Items 
           { 
            Foo = "one", 
            Bar = "two" 
           } 
         }; 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(List<Items> model) 
    { 
     return View(model); 
    } 

Ver (Índice):

@using (Html.BeginForm()) 
{ 
    for (int i = 0; i < Model.Count; i++) 
    { 
     <div onclick="$(this).remove();"> 
      @Html.TextBoxFor(model => model[i].Foo) <br/> 
      @Html.TextBoxFor(model => model[i].Bar) 
     </div> 
    } 
    <div> 
     <input type="submit"/> 
    </div> 
} 

elimino segundo par:

<div onclick="$(this).remove();"> 
     <input name="[0].Foo" type="text" value="foo"> <br> 
     <input name="[0].Bar" type="text" value="bar"> 
    </div> 

    <div onclick="$(this).remove();"> 
     <input name="[2].Foo" type="text" value="one"> <br> 
     <input name="[2].Bar" type="text" value="two"> 
    </div> 

Al publicar, obtengo solo el primer par ("foo" y "bar"). Es porque el tercer par tiene el índice "2". Quiero obtener ambos pares (sin usar FormCollection. Quiero que se vincule automáticamente). En realidad, tengo muchas otras entradas en la forma, por lo que no quiero volver a cargar y volver a conectar los índices a cada entrada. ¿Me puedes ayudar?

+0

¿Ha comprobado el código HTML generado y ha verificado que los campos de entrada esperados están dentro del alcance del formulario? –

+0

He publicado html generado y sí, está dentro de formulario. consulte "Elimino el segundo par:" sección – karaxuna

Respuesta

3

he encontrado solución, gracias a Amit Prajâpati:

@using (Html.BeginForm()) 
{ 
    for (int i = 0; i < Model.Count; i++) 
    { 
     var identifier = Guid.NewGuid(); 
     <div onclick="$(this).remove();"> 
      @Html.Hidden("Index", identifier) 
      @Html.TextBox("[" + identifier + "].Foo") 
      <br/> 
      @Html.TextBox("[" + identifier + "].Bar") 
     </div> 
    } 
    <div> 
     <input type="submit" /> 
    </div> 
} 
Cuestiones relacionadas