Sen düzenleyicinizden editörü çağırıyor. @ RPM1984, this numaralı yazıda @ darin-dmitrov'u yeniden yorumladı: Belirli bir Görüntülemede belirli bir bağlam için, çalışma zamanında kullanılan 1 şablona yalnızca., Karar vermeniz gerekir
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<% var modelMetadata = ViewData.ModelMetadata; %>
<% if (modelMetadata.HideSurroundingHtml)
{ %>
<%= Html.Editor(modelMetadata.PropertyName) %>
<% }
else
{ %>
<% if (!String.IsNullOrEmpty(modelMetadata.DisplayName))
{ %>
<div class="editor-label"><%= Html.Label(modelMetadata.PropertyName) %></div>
<% } %>
<div class="editor-field"><%= Html.TextBox(modelMetadata.PropertyName) %> <%= Html.ValidationMessage(modelMetadata.PropertyName) %></div>
<% } %>
bir şey başka yerine metin kutusu (yani açılır liste) işlemek isterseniz:
yerine editörün metin kutusu işlemek için görünümünüzü değiştirirseniz
, bu sadece çalıştı, çalışıyor Bu özellik için şablonunuzun içinde ve onu render. Daha editörler için ortak bir şey varsa Veya, ben varsa render etiketi önlemek için, GörünenAd bakılmaksızın oluşturulur
etiketleri konusunda genellikle Paylaşılan klasörde kısmi görünüm içine o ayıklamak ve sadece Html.Partial("ViewName")
kullanmak Ve !String.IsNullOrEmpty(modelMetadata.DisplayName)
(zaten ana kod bloğunda bu şekilde koymak) için hiçbir görünen ad,
dÜZENLEME Bu düzenleme varsayılan editörü şablonu object.ascx ilgili sorunun inceler atıfta senin eğer koşulu değiştirin. Bu Brad Wilson's blog alınan object.ascx kod gibidir:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<% if (ViewData.TemplateInfo.TemplateDepth > 1) { %>
<%= ViewData.ModelMetadata.SimpleDisplayText%>
<% }
else { %>
<% foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit
&& !ViewData.TemplateInfo.Visited(pm))) { %>
<% if (prop.HideSurroundingHtml) { %>
<%= Html.Editor(prop.PropertyName) %>
<% }
else { %>
<% if (!String.IsNullOrEmpty(Html.Label(prop.PropertyName).ToHtmlString())) { %>
<div class="editor-label"><%= Html.Label(prop.PropertyName) %></div>
<% } %>
<div class="editor-field">
<%= Html.Editor(prop.PropertyName) %>
<%= Html.ValidationMessage(prop.PropertyName, "*") %>
</div>
<% } %>
<% } %>
<% } %>
Bu kod gerçekten düzenleyici içinden Html.Editor çağırır, ancak karmaşık modeli özellikleri için düzenleyici listesini oluşturan bir döngü içinde. Bu çağrıların her biri karşılık gelen editörleri (yani dizge için string.ascx vb. Gösterecektir) ve sadece dizge olmayan bir "bilinmeyen" özelliği varsa ve bunun için özel bir düzenleyici (yani bayt []) çağırır bunun için object.ascx çağırmak, ancak bu dEĞİL geçerli özellik için editörü (yapmaya çalıştığınız ne) çağırarak geçerli:
nesne şablonun başlıca sorumluluğu karmaşık nesnesinin tüm özelliklerini sergiliyor , her özellik için etiketlerle birlikte. Bununla birlikte, modelin NullDisplayText değerini boş göstermesi de sorumludur ve aynı zamanda yalnızca bir düzey mülkün (bir nesnenin sığ bir dalı olarak da bilinir) gösterilmesini sağlamaktan sorumludur. Bir sonraki blog yayında, "derin dalış" işlemleri de dahil olmak üzere bu şablonu özelleştirmenin yolları hakkında konuşacağız. Aynı özellik için
Daha editörler temelde işlevsel farklılıklara çözüm (evet için "/ hayır burada radyo grubunu istiyor ve orada açılan):
Kısa versiyon ÖZETİ
"ve görsel farklılıklar için, kısmi görünümler kullanılmalıdır, çünkü onları istediğiniz kadar yuvalayabilirsiniz, çünkü bunları açıkça isimle adlandırın, böylece hiçbir sınırlama yoktur, herhangi bir potansiyel yinelemeyi önlemekten siz sorumlusunuz.
Uzun versiyon:
ben de aynı sorun var, ben <li>
veya <td>
elemanını işlemek için editör şablonu kullanıyorum, bu soruşturma yürüttükleri (config/tema bağlı olarak) ve gelen başka bir editör çağrı içeride etiket ve girdi içeren (her iki durum için de aynıdır, ancak özellik bool ise giriş daha önce etikettir), burada tekrar giriş için üçüncü şablonu arıyorum (etiket/giriş ve giriş/etiket senaryoları için çoğaltma kodunu önlemek için), ancak bu çalışmıyor. Msdn veya diğer ilgili kaynaklarda açıklama bulamadım, editörün hiçbir şey vermediği tek senaryonun şu anki editörün bağlamı için editörü oluşturmak istediğiniz zaman olduğunu anladım. quoted: "Belirli bir Görüntülemede belirli bir bağlam için çalışma zamanında kullanılan 1 şablona sahip olabilirsiniz.").Bu konuda biraz daha düşündükten sonra, mülk x'in sadece bir editör kullanılarak oluşturulabileceğinden, şimdi bu limiti uygulamakta haklı olduklarına inanıyorum. Mülk için istediğiniz kadar editöre sahip olabilirsiniz, ancak bir özelliği birden fazla şablon kullanarak bir kez oluşturamazsınız. X özelliği oluşturmak için kullandığınız şablonlardan herhangi biri, x özellikli PARTS oluşturmak için başka şablonlar kullanabilir, ancak x (xml) için birden çok kez (aynı veya farklı) edemezsiniz (aynı mantık iki veya daha fazla özelliğe sahip olmak için geçerlidir x (aynı türde) ve aynı modelde)).
geçerli şablonuna geçerli özellik için başka bir şablon eklemek eğer yanında, o anki özellik için şablonlar herhangi bir sayıda zincirleme sağlar ve kolayca böylece tek yönlü Özyinelemeyi neden olabilir ya da başka o stackoverflow götürecektir:)
SomeProperty tip dizesi, yani metin kutusu – SiberianGuy
ben dize için şablon gerekmez güncellenen cevabı –
gör hale bekliyoruz, ben Tamam şimdi anladım herhangi mülk – SiberianGuy