-6ren">
gpt4 book ai didi

c# - RenderControl 方法不呈现自关闭标签

转载 作者:太空狗 更新时间:2023-10-29 21:59:13 24 4
gpt4 key购买 nike

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 标签有一个结束标签(即使它是空的),而 image 标签也有一个结束标签。

当我在服务器上实例化此控件并尝试使用 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>

请注意 image 标签是如何缺少它的结束标签的,p 标签也没有结束,使得这个 XHTML 不再有效。

我花了一整天的时间在这上面。我已经尝试将 XhtmlTextWriter 而不是 HtmlTextWriter 传递到 RenderControl,但这没有任何区别。

有没有人遇到过这个问题?这很奇怪,此刻我们团队中的很多人都被难住了!任何帮助或想法将不胜感激。

编辑:

我可能应该提到这段代码是在 Sitecore 处理器堆栈中执行的。它在 ExpandLinks 处理器之前的“renderField”处理器堆栈中运行。

最佳答案

我怀疑这一行没有执行或抛出并吞下了异常,不允许它完成:

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

关于c# - RenderControl 方法不呈现自关闭标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7585729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com