2013-03-05 7 views
5

Mam następujący:Jak mogę edytować obiekty podrzędne w formularzu MVC4?

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

Jak mogę dostać się do pracy dla edycji obiektów podrzędnych? Próbowałem coś takiego, a także:

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

zdać IDictionary do kontrolera, ale pojawia się błąd:

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

Wydaje się to bardzo często zadanie ... Czy istnieje proste rozwiązanie do tego? czego mi brakuje? Czy muszę użyć szablonu edytora? Jeśli tak, wszystkie przykłady kompatybilne z MVC4 będą fantastyczne.

Odpowiedz

11

is there a simple solution to this?

Tak.

What am I missing?

Szablony edytora.

Tak.

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

ASP.NET MVC 4? Człowiek, szablony edytora istnieją od czasu ASP.NET MVC 2. Wszystko, co musisz zrobić, to użyć ich.

więc zacząć od pozbycia zewnętrznej foreach pętlę i zastąpienie go:

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

a potem oczywiście zdefiniować szablon edytor, który będzie renderowany automatycznie dla każdego elementu kolekcji Parents (~/Views/Shared/EditorTemplates/Parent.cshtml):

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

a następnie szablon edytor dla każdego elementu kolekcji Children (~/Views/Shared/Editortemplates/Child.cshtml), gdzie będziemy pozbyć wewnętrzna foreach elementem:

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

wszystko działa zgodnie z konwencją w ASP.NET MVC. Tak więc w tym przykładzie zakładam, że Parents jest IEnumerable<Parent> i Children jest IEnumerable<Child>. Dostosuj odpowiednio nazwy szablonów.

Wniosek: za każdym razem gdy używasz foreach lub for w widoku ASP.NET MVC robisz to źle i powinieneś rozważyć pozbycie się go i zastąpienie go edytorem/szablonem wyświetlania.

+0

Dzięki Darin. Używam teraz szablonów i one się kołyszą. Twoje zdrowie! – RobVious

Powiązane problemy