C# RenderControl方法不呈现自动关闭标记

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 %>">

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>
<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。