C# RenderControl方法不呈现自动关闭标记
RenderControl方法有一个奇怪的问题 我的UserControl(一个ASCX文件)具有以下标记:C# RenderControl方法不呈现自动关闭标记,c#,asp.net,sitecore,sitecore6,C#,Asp.net,Sitecore,Sitecore6,RenderControl方法有一个奇怪的问题 我的UserControl(一个ASCX文件)具有以下标记: <ul> <asp:Repeater ID="rptImages" runat="server"> <ItemTemplate> <li> <a href="<%# ((Image)Container.DataItem).Url %>">
<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>
<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>
然后返回的XHTML如下所示:
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();
<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 %>
@Sam:RenderControl方法是从控件
类继承而来的。我创建了一个解决方案,该解决方案与您在此处显示的几乎相同,我无法重现相同的错误。输出的HTML是有效的。顺便问一下,我想你的中继器绑定是在那个照排机上发生的吧?“数据全屏”是从哪里来的,在javascript干预发生之前,你肯定给了我们builder.ToString()返回的内容?是的,我捕获了builder.ToString()返回的文本并粘贴到这里。我想可能是有其他东西弄乱了它,但这是如何从StringBuilder返回的,它连接到HtmlTextWriter。只是为了好玩,在段落标记之间添加一个空格,看看会发生什么。你能在UserControl中包含代码吗,如果需要的话可以简化?必须有一些额外的工作正在进行,以添加额外的属性到标签的一开始,可能有一些东西在那里。我还怀疑,通过LoadControl实例化控件不会像我在演示中体验到的那样执行您可能遇到的所有usercontrol事件;这是一种很好的查找被吞没的异常的方法,它位于Debug->exceptions选项中。我启用了异常,但没有抛出任何异常。另外,在将图像列表绑定到控件时,我检查了“Description”属性,它是一个空字符串,而不是null。