2010-01-25 10 views
5

In un'applicazione ASP.NET MVC, sto tentando di inviare più oggetti con un singolo modulo. Sono in grado di ottenere tipi semplici da postare ma ho problemi con tipi complessi. Mi sembra di aver imitato l'esempio fornito da Phil Haack nel suo post sul blog Model Binding To A List ma senza fortuna. Anche andando fino a copiare il suo codice senza successo.ASP.NET MVC: postare più oggetti complessi con il modulo

Sto tentando di popolare le proprietà ProjectNum e TaskNum di un set di oggetti MachineLicenseBillback. Sfortunatamente il IList<MachineLicenseBillback> machinePts finisce sempre come un nullo quando inviato.

Cosa mi manca?

Classe

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; } 
} 

azione

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

Modulo

<% 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

anch'io avuto nessun successo nel far funzionare il codice di esempio di Phil Haack. Ho anche provato alcuni altri esempi di bind-to-list senza fortuna. –

risposta

2

La sintassi .Index stato rimosso perMVC 1 RTM e reintrodotta nel MVC 2. Per MVC 1, elementi dell'elenco devono essere numerati: machinePts [0], machinePts [1], ecc

+0

Beh, è ​​un peccato ... hai un link che indica dove è stato rimosso da MVC 1 RTM? Più curioso sul * perché *, non che sia davvero importante considerando che MVC 2 sarà presto disponibile. – ahsteele

+0

Vedere http://forums.asp.net/p/1377775/2906260.aspx. In breve, non abbastanza persone lo hanno richiesto, quindi è stato rimosso e le risorse di QA sono state spostate altrove. – Levi

0

Scott Hanselman ha una guida completa 0.123.per gli elenchi di elementi vincolanti. In breve, il metodo del controller richiede una serie di MachineLicenseBillback, non uno IList.

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

Guardando il codice, se si desidera associare a un IDictionary (non un IList), è possibile utilizzare coppie chiave/valore nella vista, invece. Oppure puoi conservare il codice che hai attualmente nella vista e utilizzare una matrice come parametro nel metodo del controller.

Prestare particolare attenzione alle convenzioni di denominazione. In caso di mancata corrispondenza nella denominazione, il raccoglitore modello non raccoglierà i dati. sequenzialmente

+0

Provato a cambiare l'azione TrueUp per cercare una matrice di oggetti 'MachineLicenseBillback' e sto avendo lo stesso problema: machinePts è' null' sul postback. Avevo letto il post di Hanselman ma l'esempio di "ILIS" nell'esempio di Haack sembrava più chiaro. – ahsteele

Problemi correlati