2011-09-28 8 views
6

RenderControl yöntemiyle garip bir sorunla karşılaşıyorum.RenderControl yöntemi kendi kendine kapatma etiketlerini üretmiyor

bu işareti makyaj ile UserControl (bir ASCX dosyası) var: Bu kod, normal sayfa yaşam döngüsü içinde yürütür zaman (. O bir sayfaya eklendiğinde örneğin)

<ul> 
<asp:Repeater ID="rptImages" runat="server"> 
    <ItemTemplate> 
     <li> 
      <a href="<%# ((Image)Container.DataItem).Url %>"> 
       <img src="<%# ((Image)Container.DataItem).Url %>?mw=80&mh=50" title="<%# ((Image)Container.DataItem).Title %>" alt="<%# ((Image)Container.DataItem).Alt %>" /> 
       <p><%# ((Image)Container.DataItem).Description %></p> 
      </a> 
     </li> 
    </ItemTemplate> 
</asp:Repeater> 
</ul> 

, geçerli XHTML vermektedir mark-up gibi: p biçiminin kapanış sahiptir nasıl

<ul> 
    <li> 
     <a data-fullscreen="/someimage.jpg" href="/another-image.jpg"> 
      <img src="/myimage?mw=80&mh=50" title="Image Title" alt="Alt Text" /> 
      <p></p> 
     </a> 
    </li> 
</ul> 

Not (boş olsa bile) ve resim etiketi aynı zamanda bir kapanış etiketi vardır.

sunucuda bu denetimin örneğini kullanarak bir dizeye ayrıştırmak çalıştığınızda böyle RenderControl() yöntemi: Böyle

StringBuilder builder = new StringBuilder(); 
using (StringWriter writer = new StringWriter(builder)) 
{ 
    using (XhtmlTextWriter htmlWriter = new XhtmlTextWriter(writer)) 
    { 
     var control = (GalleryControl)LoadControl("~/layouts/Controls/Gallery/GalleryControl.ascx"); 
     control.Images = m_images; 
     control.RenderControl(htmlWriter); 
    } 
} 
return builder.ToString(); 

Sonra XHTML döndürülür görünüyor:

<ul> 
    <li> 
     <a data-fullscreen="/someimage.jpg" href="/another-image.jpg"> 
      <img src="/myimage?mw=80&mh=50" title="Image Title" alt="Alt Text"> 
      <p> 
     </a> 
    </li> 
</ul> 

Resim etiketinin kapama etiketinde nasıl eksik olduğunu ve p etiketinin de kapanmayacağını unutmayın; bu XHTML artık geçerli olmayacaktır.

Bütün günü bunun üzerinde harcadım. Ben RenderControl geçmek için HtmlTextWriter yerine XhtmlTextWriter denedim, ancak bu herhangi bir fark yaratmadı.

Bu sorunla karşılaşan başka biri var mı? Oldukça tuhaf ve şu anda güvendiğimiz takımda bir sürü var! Herhangi bir yardım veya fikir takdir edilecektir.

DÜZENLEME Bu kod Sitecore işlemci yığınında yürütülmekte olan, muhtemelen bahsetmeliydik

. ExpandLinks işlemcisinden hemen önce "renderField" işlemci yığınında çalışır.

+0

@Sam: 'RenderControl' yöntemi' Control' sınıfından miras alınır. –

+0

Burada gösterdiğiniz ile hemen hemen aynı olan ve aynı hatayı yeniden oluşturamadığım bir çözüm oluşturdum. Çıktılan HTML geçerli. Yineleyicinizin bağlayıcısını bu görüntü ayarlayıcıda meydana geliyor mu? Bu "veri-tam ekran" nereden geliyor, kesinlikle bize herhangi bir javascript sıkışma gerçekleşmeden önce builder.ToString(), ne geri veriyor? – Kasaku

+0

Evet, builder.ToString() öğesinden döndürülen metni yakaladım ve buraya yapıştırdım. Onunla uğraştığım başka bir şey olabileceğini düşündüm ama bu, StringBuilder'dan HtmlTextWriter'e eklendiğidir. – NullReferenceException

cevap

1

Bu hat yürütmüyor şüpheli veya bir istisna atılır ve bitirmek için izin vermiyor yutulur:

<%# ((Image)Container.DataItem).Description %> 
+1

Visual Studio'da bunu hata ayıklayabiliyorsanız, yakalama yerine özel durum atıldığında hata ayıklama ayarlarınızı değiştirmeyi deneyin; Yutulmuş istisnalar bulmanın iyi bir yoludur, Hata Ayıklama -> İstisnalar seçeneklerinde. –

+0

İstisnaları etkinleştirdim ancak hiçbiri atılmıyor. Ayrıca, görüntü listesini kontrole bağladığımda, "Açıklama" özelliğini kontrol ettim ve boş olmanın tersine boş bir dize. – NullReferenceException