2011-07-25 12 views
19

Bir editör şablonum var ve aynı modele sahip başka bir düzenleyici şablonu (örn. Iç içe yerleştirilmiş) aramak istediğim editör şablonu içinde ama gösterilmiyor gibi görünüyor.
ie. \ EditorTemplates Template1.cshtmlBir Editör Şablonda, aynı Modele sahip başka bir Editör Şablonu arayın

\
@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") 

ve \ EditorTemplates

@model foo 

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

Template2.cshtml

\ Birisi sorgulamayı eminim? Yuvalanmış şablon sadece bir koşul karşılandığında görüntülenecektir (ör. @if (@ Model.IsConditionMet) {....}), ancak bunu basitlik için benim prototipimden çıkardım.

+0

Benzer bir şey yapmaya çalışıyorum ama boşuna. Bunu yazdığından beri şansın var mı? – kdawg

+0

Aslında, takip bilgisi: Bunu Telerik'in MVC ızgara kontrolü ile birlikte yapmaya çalışıyorum. Bunun da onunla bir ilgisi olabilir. – kdawg

+0

@kdawg - Hayır, hayır şans üzgünüm. JQuery şablonlarına ve Knockout'lara geçtim. – tkerwood

cevap

41

Kısa cevap:

kullanın Html.Partial yerine.

Yani, Template1.cshtml dosyasında:

@model foo 

// insert code here to edit the default fields. 

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

Uzun cevap:

Bu ne yazık ki tasarımdan olarak görünmektedir. MVC, oluşturulmuş olan modelleri izler ve modeliniz bir şablon tarafından zaten oluşturulmuşsa, şablon farklı olsa bile, iki kez yapmayacaktır. Bu yüzden ikinci @Html.EditorForModel("Template2") neden sadece bir şey yapmıyor.

Özel olarak, bir iç alan olan ViewData.TemplateInfo.VisitedObjects izlenir, bu yüzden gerçeği değiştirdikten sonra hiçbir umudu yoktur. Bu alanın amacı sonsuz tekrarı engellemektir. Asil, ama can sıkıcı olan bu şablon dikkate alınmaz. http://aspnetwebstack.codeplex.com/, MVC bu garip huyların bulmak için mükemmeldir :

Ben kaynak koduna bakarak öğrendim.

+2

Çok yardımcı yanıt, araştırma için teşekkürler! –

+1

Bu, yanıt olarak işaretlenmelidir. Güçlü çalışma. – akousmata

+0

Cevap olarak işaretlemek için oy veremeyeceğimiz bir utanç. Araştırmanız için teşekkürler. – Ravendarksky

İlgili konular