2012-02-26 10 views
8

L'utilizzo dei modelli di EditorFor è una funzionalità davvero interessante di ASP.Net MVC 3, ma è possibile ottenere EditorFor per eseguire il rendering di un modello non popolato per consentire la creazione di record?Utilizzo di Html.EditorPer creare uno spazio vuoto per i nuovi record

Oppure c'è un altro modo per farlo?

I modi in cui sto cercando di fare questo è la seguente:

@Html.EditorFor(model => model) 
    @Html.EditorFor(x => new List<Business.ViewModel.Affiliate.Contact>()) 
    @Html.EditorFor(new List<Business.ViewModel.Affiliate.Contact>()) 
    @Html.EditorFor(new Business.ViewModel.Affiliate.Contact()) 

La prima funziona, ovviamente, ma quelle successive (che dimostrano quello che sto cercando di fare) tutte con il seguente errore:

Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions. 

Il modello in questione è:

IEnumerable<Business.ViewModel.Affiliate.Contact> 
+0

È possibile creare il proprio modello personalizzato o semplicemente creare una variabile per il modello vuoto al volo: @ {var emptyModel = new Business.ViewModel.Affiliate.Contact();} @ Html.EditorFor (emptyModel) Mentre non il più pulito, funziona –

risposta

6

È responsabilità del controller preparare il modello di vista che verrà passato alla vista. Quindi, se avete bisogno di per esempio per inizializzare il Vista modello con 5 file di contatti vuote si potrebbe fare questo semplicemente nel controller:

public ActionResult Index() 
{ 
    var model = new MyViewModel 
    { 
     // Add 5 empty contacts 
     Contacts = Enumerable.Range(1, 5).Select(x => new Contact()).ToList() 
    }; 
    return View(model); 
} 

e nella vista usare l'helper EditorFor come al solito:

@model MyViewModel 
... 
@Html.EditorFor(x => x.Contacts) 

Questo renderizza il modello editor corrispondente per ciascuno dei 5 elementi che abbiamo aggiunto alla collezione Contacts.

+0

Ho intenzione di andare con questo come risposta, in quanto è la soluzione che ho usato alla fine ed è anche una soluzione che ha più senso - il controller dovrebbe preparare l'esatto viewmodel che la vista richiede per funzionare . – Moo

+0

I GIORNI PASSATI ALLA RICERCA PERCHÉ IL MODELLO DEL MIO EDITOR NON SAREBBE RENDENTE! GIRA FUORI CANTARE RENDER NULL! –

0

Se la tua domanda non comporta AJAX, quindi vorrei progettare il ViewModel come segue:

class MyList 
{ 
    public List<MyRow> Rows {get;set;} 
    public MyRow NewRow {get;set;} 
} 

allora si può facilmente aggiungere un editor di vuoto legato alla proprietà NewRow. E nel controller si aggiunge NewRow a Rows nelle chiamate successive.

Problemi correlati