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.
@Sam: 'RenderControl' yöntemi' Control' sınıfından miras alınır. –
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
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