2011-10-20 14 views
38

MVC'yi varsayılanlar dışındaki bir klasöre işaretler misiniz (Views/Shared/EditorTemplates & Views/Shared/DisplayTemplates)? Bunları ya alt klasörlere ya da Paylaşılan klasörün dışındaki diğer klasörlere yerleştirmek isterim. Bu klasör altında bir editör şablonu varsa, örneğinMVC şablonu varsayılandan başka klasörden (EditorTemplates/DisplayTemplates)?

:

~\Views\Order\ProductModel.cshtml

nasıl EditorFor şablonu bu tempalte adı kullanmak söyleyebilir?

ben tam niteleyerek çalıştım ama bu işe yaramazsa:

Ben ileriye kullanarak denedim
@Html.EditorFor(m => m.ProductModel, @"~\Views\Order\ProductModel.cshtml") 

.chstml/olmadan, & ters eğik çizgi eğik, aklıma her kombinasyonu. Bunun desteklenmediğini düşünmeye başladım, ama neden olmayacağını hayal bile edemiyorum.

cevap

47

Hayır, korkarım bunu yapamazsınız.

For example, if I have an editor template under this folder

Artık bir düzenleyici şablonu değil. Bu bir kısmi. Editör şablonlarını farklı denetleyiciler arasında paylaşmak isterseniz, bunları ~/Views/Shared/EditorTemplates klasörüne yerleştirebilirsiniz.

Bildiğim kadarıyla alt klasörler söz konusu olduğunda o zaman bu yapabilirdi: ~/Views/CurrentController/EditorTemplates/Order/ProductModel.cshtml veya ~/Views/Shared/EditorTemplates/Order/ProductModel.cshtml editör şablonu verecek

@Html.EditorFor(x => x.Foo, "Order/ProductModel") 

.

+6

Bu mantıklıdır. Denetleyicinin görüntüleme klasörünün altında Editor/DisplayTemplate klasörleri olduğunu bilmiyordum. Bu yapmaya çalıştığım şeyi başarır. Teşekkürler Darin. –

+0

İkinci yol: '~/Görünümler/Paylaşılan/EditorTemplates/Sipariş/ProductModel.cshtml' benim için bulunmaz ... bir gotcha var mı? – Dmitry

+0

Aslında onu buluyor, ancak bana bir hata veriyor: 'Sözlüğe aktarılan model öğesi 'System.Collections.Generic.List''1 [Whatever.Models.ProductModel]' türündendir, ancak bu sözlük bir model öğesi gerektirir. Örneğinizde 'Whatever.Models.ProductModel'.' – Dmitry

3

Bunu yaparsanız bu:

@Html.EditorFor(x => x.Foo, "Order/ProductModel") 

bir koleksiyon olarak Foo ayrıştırmak ve her öğe için editör şablonu geçerli olmayacaktır. Editör şablonunuzun bir bütün olarak koleksiyona uygulanması gerektiğini varsayacaktır. tek tek her öğeye editör şablonu uygulamak isterseniz

, sadece (o öncelik olacak şekilde) görünümünüzü klasörünün altında EditorTemplates klasörüne yerleştirin ve varsayılan sözdizimini kullanın: Elbette

@Html.EditorFor(x => x.Foo) 

, Düzenleyici şablonunun adı, koleksiyonunuzdaki öğelerin türüyle eşleşmelidir.

4

Eski soru, ancak ... belirli bir denetleyici için görüntüleyici/düzenleyici şablonu eklemek için uygun yol, DisplayTemplates veya EditorTemplates alt klasörüne eklemektir. senin örnekte, OrderController sahip olduklarını varsayarsak

, sadece bu gibi alt klasöre modeliniz için ekran şablonu koyabilirsiniz:

~\Views\Order\DisplayTemplates\ProductModel.cshtml 

Ardından, görünümünden normal ekran şablonu çağrı (ex : "~ \ Views \ Order \ Index.cshtml"):

@Html.DisplayFor(m => m.MyProductModelProperty) 
+1

Bu cevap, Editör/Görüntü şablonlarının paylaşılmak için anlamlı olmadıklarında değil, belirli bir denetleyicide yer aldıklarında daha iyi bir şekilde ele alınıyor. Sürdürülebilirlik uğruna bazen tekrar kullanılamayan şeyleri yeniden kullanmayı dener. Bu cevap için bir oy. –

İlgili konular