2013-03-05 21 views
5

Ho il seguente:Come posso modificare oggetti figlio in un modulo MVC4?

@foreach (var parent in Model.Parents) 
{  
    @foreach (var child in parent.Children) 
    {  
     @Html.TextAreaFor(c => child.name)  
    }     
} 

Come posso ottenere la modifica di lavorare per oggetti figlio? Ho provato qualcosa di simile così:

<input type="hidden" name="children.Index" value="@child.Id" /> 
<textarea name="children[@child.Id]" >@child.Name</textarea> 

per passare un IDictionary al controller, ma ottengo un errore:

[InvalidCastException: Specified cast is not valid.] 
    System.Web.Mvc.CollectionHelpers.ReplaceDictionaryImpl(IDictionary`2 dictionary, IEnumerable`1 newContents) +131 

Questo mi sembra un compito molto comune ... c'è una soluzione semplice a questa? Cosa mi manca? Devo usare un modello di editor? Se è così, qualsiasi esempio compatibile con MVC4 sarebbe fantastico.

risposta

11

is there a simple solution to this?

Sì.

What am I missing?

Modelli di editor.

Do I need to use an Editor Template?

Sì.

If so, any MVC4-compatible examples would be fantastic.

ASP.NET MVC 4? Man, i modelli di editor esistono fin da ASP.NET MVC 2. Tutto ciò che devi fare è usarli.

modo da iniziare a sbarazzarsi del foreach ciclo esterno e la sua sostituzione con:

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

e poi, ovviamente, definire un editor di modelli che verranno resi automaticamente per ogni elemento della collezione Parents (~/Views/Shared/EditorTemplates/Parent.cshtml):

@model Parent 
@Html.EditorFor(x => x.Children) 

e poi un editor di modelli per ogni elemento della collezione Children (~/Views/Shared/Editortemplates/Child.cshtml) dove ci libereremo della interno foreach elemento:

@model Child 
@Html.TextAreaFor(x => x.name) 

tutto funziona per convenzione in ASP.NET MVC. Quindi in questo esempio presumo che Parents sia un IEnumerable<Parent> e Children sia un IEnumerable<Child>. Adeguare i nomi dei tuoi modelli di conseguenza.

Conclusione: ogni volta che si utilizza foreach o for in ASP.NET MVC vista si sta facendo male e si dovrebbe prendere in considerazione per liberarsi di esso e la sua sostituzione con un modello di editore/display.

+0

Grazie Darin. Sto usando i modelli ora e loro rock. Saluti! – RobVious

Problemi correlati