Domanda

Dopo molto googling, stackoverflowing (?) E il blog di lettura ho ancora cant completamente risolvere il problema. Speriamo che questa comunità di esperti in grado di venire in soccorso!

Dato: Una classe società con un ICollection campo (una società può avere molti indirizzi). Ogni indirizzo ha un paio di semplici campi stringa.

Versione corta:

Voglio l'utente sia in grado di aggiungere qualsiasi numero di indirizzi alla società. Prima di tutto voglio mostrare una serie di caselle di testo Indirizzo e quindi un pulsante "Aggiungi un altro indirizzo". Il Javascript non è un problema, anzi la parte MVC. Se poco chiaro, la funzionalità dovrebbe essere similair a questo: http://www.mdelrosso.com/sheepit/index.php?lng = it_IT & sec = demo3

ho bisogno di usare la funzione MVC EditorForModel (), il che significa che tutte le esigenze di configurazione per andare in Editor modelli.

Stato finora:

  • Creata ViewModel per la pagina di modifica società (CompanyViewModel)
  • Aggiunto [UIHint ( "Indirizzi")] agli indirizzi campo pubblico ICollection {get; impostato; }
  • Indirizzi creati EditorTemplate

Indirizzi EditorTemplate, quando si aggiunge una nuova società, il modello passato è Null (nessuna sorpresa là). Come faccio a creare l'editor per l'indirizzo in più? Ho provato diverse incarnazioni di (utilizzando Razor):

@Html.EditorFor(m => new Address());

ma aint in grado di produrre qualcosa di anche lontanamente di lavoro. (L'esatta linea dà l'errore "Modelli può essere utilizzato solo con l'accesso di campo, l'accesso alle proprietà, indice di array monodimensionale, o singolo parametro espressioni indicizzatore personalizzato").

Grazie per tutti i puntatori!

/ Victor

È stato utile?

Soluzione

Questa è una lacuna delle API attuali. Un modo che si possa fare è di avere un'azione bambino che è responsabile per la generazione del modulo di inserimento

Nel vostro controller:

[ChildActionOnly]
public ActionResult AddAddress() {
    return View(new Address()); // pass an instance so view works
}

Aggiungi una nuova vista AddAddress.cshtml

@model Address
@Html.EditorForModel()

Poi nel vostro uso editor di modelli

@Html.Action("AddAddress")
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top