1

我已经设置并安装了 Composite C1 4.0 beta,以及最新的 MVC Player 版本(从 2012 年 12 月 7 日开始),但是每当我调用 MVCPlayer 函数时,它都会在页面上输出额外的标签。例如,我正在为面包屑调用 MVCPlayer 函数。这是输出:

..... before breadcrum content .....
<a name="site-nav" class="screen-reader"></a>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head />
    <body>
        <html>
            <head />
            <body>
<!-- START BREADCRUM SECTION -->
                <ul id="breadcrumbs">
                    <li><a href="/">Homep</a></li>
                    <li>Events</li>
                </ul>
<!-- END BREADCRUM SECTION -->
            </body>
        </html>
    </body>
</html>
<div class="clear"></div>
</div>
..... rest of page .....

如您所见,它位于页面中间。MVCPlayer 在渲染函数中返回一个 XDocument。那么,如何去掉 START & END BREADCRUM SECTION 评论之前的额外标签?页面呈现良好,但这影响了我使用页面过滤器向输出添加其他内容的能力,例如切换图像标记 src,以便我可以使用 jquery 脚本执行延迟加载图像(参见http:// /www.appelsiini.net/projects/lazyload)。

有什么想法吗?

谢谢!

乍得


实际面包屑页面的输出很简单<ul><li>...</li></ul>,并且日志文件中没有错误。MVC Player 实际上添加了附加代码:

<html xmlns="http://www.w3.org/1999/xhtml">
    <head />
    <body>
    </body>
</html>

在 Player.cs 文件中,代码如下:

var sbHtml = new StringBuilder();
            sbHtml
                .Append(@"<html xmlns=""http://www.w3.org/1999/xhtml""> 
            <head/>
            <body>")
                .Append(responseWriter.ToString())
                .Append(@"
            </body>
            </html>");

            try
            {
                return XDocument.Parse(sbHtml.ToString());
            }

我能够修改 /Renderers/Page.aspx.cs 并将这一行更改为“剥离”额外的标签:

原来的:

xhtml = _renderingContext.FormatXhtml(xhtml);

更新:

xhtml = _renderingContext.FormatXhtml(xhtml.Replace(@"<html xmlns=""http://www.w3.org/1999/xhtml"">", "").Replace("<html>", "").Replace("<head />", "").Replace("<head></head>", "").Replace("<body>", "").Replace("</body>", "").Replace("</html>", ""));

我确定有比这更好的解决方案吗?:)

乍得

4

1 回答 1

1

可能是页面上的其他地方有标记,导致整个结果文档和无效的 XHTML,因此系统无法正确处理它。

尝试

a) 检查日志文件以查看是否有任何相关警告

b) 验证输出 xhtml http://www.xmlvalidation.com/

于 2012-12-10T09:02:50.907 回答