2013-03-05 7 views
5

Ich habe folgendes:Wie kann ich untergeordnete Objekte in einem MVC4-Formular bearbeiten?

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

Wie kann ich die Bearbeitung für untergeordnete Objekte zur Arbeit? Ich habe versucht, so etwas auch:

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

Um eine IDictionary an die Steuerung übergeben, aber ich erhalte eine Fehlermeldung:

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

Diese wie eine sehr häufige Aufgabe scheint ... ist es eine einfache Lösung dazu? Was vermisse ich? Muss ich eine Editor-Vorlage verwenden? Wenn ja, wären alle MVC4-kompatiblen Beispiele fantastisch.

Antwort

11

is there a simple solution to this?

Ja.

What am I missing?

Editor-Vorlagen.

Do I need to use an Editor Template?

Ja.

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

ASP.NET MVC 4? Mann, Editor Vorlagen gibt es seit ASP.NET MVC 2. Alles, was Sie tun müssen, ist es, sie zu verwenden.

beginnt also von der äußeren foreach Schleife loszuwerden und ersetzt es mit:

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

und dann natürlich eine Editor-Vorlage definieren, die für jedes Element der Parents Sammlung automatisch gerendert werden (~/Views/Shared/EditorTemplates/Parent.cshtml):

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

und dann eine Editor-Vorlage für jedes Element der Children Sammlung (~/Views/Shared/Editortemplates/Child.cshtml), wo wir 0 der inneren loswerden werdenElement:

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

alles funktioniert durch Konvention in ASP.NET MVC. In diesem Beispiel nehme ich an, dass Parents ein IEnumerable<Parent> ist und Children ein IEnumerable<Child> ist. Passen Sie die Namen Ihrer Vorlagen entsprechend an.

Fazit: jedes Mal, wenn Sie foreach oder for in einer ASP.NET MVC-Ansicht verwenden, tun Sie es falsch und Sie sollten in Betracht ziehen, es loszuwerden und es durch eine Editor/Anzeigevorlage zu ersetzen.

+0

Danke Danke. Ich benutze jetzt Vorlagen und sie rocken. Prost! – RobVious

Verwandte Themen