ASP.NET MVC 2 Modello Binding: Come eseguire il debug di un modello parzialmente fallito vincolante sul retro post?
-
25-09-2019 - |
Domanda
Abbiamo avuto una vista del modello che si presentava così:
public class myViewModel {
public Contract contract {get;set;}
public Vendor vendor {get;set;}
}
public class Contract {
public int contractID {get;set;}
// ... various string properties
public IList<ContractDetail> contractDetails {get;set;}
pubilc Vendor vendor {get;set;}
}
Di ritorno dalla forma è stato il contratto a termine.
[HttpPost]
public ActionResult Edit(Contract contract) { ... }
Tutto ha funzionato valori forma post-binding di nuovo per le proprietà dei parametri del contratto.
Quando ci siamo trasferiti fornitore a contratto come un oggetto di valore, tutti al primo livello proprietà "primitivi" del contratto non riescono a impegnare. Tutto l'IList <> proprietà vanno bene.
Tutte le idee o che cosa ulteriori informazioni ci sarebbe bisogno di risolvere questo enigma? C'è un modo per testare come MVC lega i valori della forma Indietro ai parametri degli oggetti? È la soluzione qualcosa a che fare con il fornitore non essendo un IList, vale a dire, perché sarebbe la multa proprietà IList lavoro?
Modifica:
La correzione era di specificare i nomi assolutamente gerarchia di oggetti in tutti i campi, per esempio, per il nome del fornitore di bind, ha richiesto un nome di "Contract.vendor.name". Questo prefisso è stato fatto per noi utilizzando il ViewModel, ma non fatto per noi utilizzando il Modello di contratto. Abbiamo finito per fare questo per tutti i modelli di visualizzazione (vista parziale):
EditorFor(m => m.vendor, "Vendor", "Contract.vendor")
dove "Venditore" è il nome del EditorTemplate "Vendor.ascx" e "Contract.vendor" prefissi tutti i nomi dei campi modulo.
Credo perché il ViewModel annidato tutti i dati, ha causato MVC a prefisso correttamente tutte le proprietà. Ciò significherebbe che "sciolti" campi di modulo non qualificati, i prefissi degli oggetti non si legano agli oggetti parametro con nome.
Soluzione
Basta scaricare il MVC codice sorgente , fare un riferimento al progetto ed eseguire il debug attraverso il legante di default.