[英]RenderControl method not rendering self-closing tags
RenderControl方法有一个奇怪的问题。
我有这个标记的UserControl(ASCX文件):
<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>
当此代码在正常页面生命周期中执行时(例如,当它被添加到页面时),它会将有效的XHTML呈现为标记:
<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>
请注意p标记如何具有结束标记(即使它是空的),并且图像标记也有结束标记。
当我在服务器上实例化此控件并尝试使用RenderControl()方法将其解析为字符串时,如下所示:
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();
然后返回的XHTML如下所示:
<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>
请注意图像标记如何缺少其结束标记,并且p标记也未关闭,从而使此XHTML不再有效。
我花了整整一天时间。 我已经尝试过将XhtmlTextWriter而不是HtmlTextWriter传递给RenderControl,但这没有任何区别。
还有其他人遇到过这个问题吗? 这很奇怪,我们团队中的很多人目前都很难过! 任何帮助或想法将不胜感激。
编辑:
我可能应该提到这个代码正在Sitecore处理器堆栈中执行。 它在ExpandLinks处理器之前的“renderField”处理器堆栈中运行。
我怀疑这行不会执行,或者抛出异常并吞下不允许它完成:
<%# ((Image)Container.DataItem).Description %>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.