2011-07-25 8 views
19

Mam szablon edytora iw tym szablonie edytora chcę wywołać inny szablon edytora z tym samym modelem (to jest zagnieżdżony), ale nie wydaje się on wyświetlany.
tj. \ EditorTemplates \ Template1.cshtmlW szablonie edytora wywołaj inny szablon edytora o tym samym modelu

@model foo 

// insert code here to edit the default fields. 

// display extra fields via another editor template. 
@Html.EditorForModel("Template2") // or @Html.EditorFor(m => m, "Template2") 

i \ EditorTemplates \ Template2.cshtml

@model foo 

@Html.TextBoxFor(m => m.Name) 

Jestem pewien, że ktoś będzie pytanie, dlaczego? Cóż, szablon zagnieżdżony będzie wyświetlany tylko wtedy, gdy spełniony zostanie warunek (np. @if (@ Model.IsConditionMet) {....}), ale pozostawiłem to z mojego prototypu dla uproszczenia.

+0

Próbuję zrobić coś podobnego, ale bezskutecznie. Masz szczęście, odkąd to napisałeś? – kdawg

+0

Właściwie, informacje uzupełniające: Próbuję to zrobić w połączeniu z kontrolą siatki MVC Telerik. To może mieć z tym coś wspólnego. – kdawg

+0

@kdawg - Nie, nie, przepraszam. Przeniosłem się na szablony JQuery i Knockoutjs. – tkerwood

Odpowiedz

41

Krótka odpowiedź:

Zastosowanie Html.Partial zamiast.

Tak w Template1.cshtml pliku:

@model foo 

// insert code here to edit the default fields. 

// display extra fields via another editor template. 
@Html.Partial("EditorTemplates/Template2", Model) 

Długa odpowiedź:

to niestety wydaje się po konstrukcji. MVC śledzi modele, które zostały wyrenderowane, a jeśli twój model został już wyrenderowany przez szablon, nie zrobi tego dwa razy, nawet jeśli szablon jest inny. Stąd dlaczego drugi @Html.EditorForModel("Template2") po prostu nic nie robi.

W szczególności jest śledzone w ViewData.TemplateInfo.VisitedObjects, które jest polem wewnętrznym, więc nie ma żadnej nadziei, że zmienisz go po fakcie. Intencją tego pola jest zapobieganie nieskończonej rekursji. Szlachetny, ale denerwujący, ponieważ nie bierze pod uwagę wziętego szablonu.

Znalazłem to, patrząc na kod źródłowy: http://aspnetwebstack.codeplex.com/, , który świetnie nadaje się do wyszukiwania tych dziwnych idiosynkrazji MVC.

+2

Bardzo pomocna odpowiedź, dzięki za badania! –

+1

To powinno być oznaczone jako odpowiedź. Silna praca. – akousmata

+0

Szkoda, że ​​nie możemy głosować, aby oznaczyć jako odpowiedź. Dziękuję za twoje badania. – Ravendarksky

Powiązane problemy