2010-01-25 17 views
5

En una aplicación ASP.NET MVC, estoy intentando enviar varios objetos con un solo formulario. Puedo hacer que tipos simples publiquen de nuevo, pero tengo problemas con tipos complejos. Siento que he imitado el ejemplo proporcionado por Phil Haack en su publicación de blog Model Binding To A List pero sin suerte. Incluso yendo tan lejos como copiar su código, fue en vano.ASP.NET MVC: publicar objetos complejos múltiples con el formulario

Estoy intentando rellenar las propiedades ProjectNum y TaskNum de un conjunto de objetos MachineLicenseBillback. Lamentablemente, el IList<MachineLicenseBillback> machinePts siempre termina como un nulo cuando se publica.

¿Qué me estoy perdiendo?

Clase

public class MachineLicenseBillback 
{ 
    public MachineLicenseBillback() { } 

    public virtual int MachineId { get; set; } 
    public virtual string ProjectNum { get; set; } 
    public virtual string TaskNum { get; set; } 
    public virtual string VerifiedFlag { get; set; } 
    public virtual DateTime? RcdChgDateTime { get; set; } 
    public virtual string RcdChgAgent { get; set; } 
} 

Acción

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult TrueUp(int id, IList<MachineLicenseBillback> machinePts) 
{ 
    // ... 
} 

Formulario

<% using (Html.BeginForm("TrueUp", "Home", new { id = Model.Customer.Id }, 
      FormMethod.Post)) 
    { %> 
<input type="hidden" name="machinePts.Index" value="<%= machine.MachineId %>" /> 

<input type="text" name="machinePts[<%= machine.MachineId%>].ProjectNum" 
    value="<%= machine.MachineLicenseBillback.ProjectNum %>" /> 

<input type="text" name="machinePts[<%= machine.MachineId %>].TaskNum" 
    value="<%= machine.MachineLicenseBillback.TaskNum %>" /> 

<input type="submit" value="Submit" /> 
<% } %> 
+1

yo también he tenido no hay éxito haciendo que el código de muestra de Phil Haack funcione. También intenté algunas otras muestras vinculadas sin suerte. –

Respuesta

2

La sintaxis .index se eliminó para MVC 1 RTM y reintroducida en MVC 2. Para MVC 1, elementos de la lista deben ser numerados secuencialmente: machinePts [0], machinePts [1], etc.

+0

Bueno, eso está muy mal ... ¿tienes un enlace que indique dónde se eliminó esto del MVC 1 RTM? Más curioso sobre el * por qué *, no es que realmente importe teniendo en cuenta que el MVC 2 saldrá pronto. – ahsteele

+0

Ver http://forums.asp.net/p/1377775/2906260.aspx. En pocas palabras, no hay suficientes personas que lo pidieron, por lo que se eliminó y los recursos de control de calidad se trasladaron a otro lugar. – Levi

0

de Scott Hanselman tiene un recorrido completo here para listas de artículos vinculantes. En resumen, su método de controlador necesita una matriz de MachineLicenseBillback, no un IList.

public ActionResult TrueUp(int id, MachineLicenseBillback[] machinePts) 
{ 
    // ... 
} 

En cuanto a su código, si desea unirse a un IDictionary (no un IList), puede utilizar pares clave/valor en la vista en su lugar. O puede mantener el código que tiene actualmente en la vista y utilizar una matriz como parámetro en el método del controlador.

Preste especial atención a las convenciones de nomenclatura. Si hay una falta de coincidencia en la denominación, la carpeta modelo no recogerá los datos.

+0

Intenté cambiar la acción TrueUp para buscar una matriz de objetos 'MachineLicenseBillback' y estoy teniendo el mismo problema: machinePts es' null' en la publicación posterior. Había leído la publicación de Hanselman pero el 'IList' en el ejemplo de Haack parecía más claro. – ahsteele

Cuestiones relacionadas