1

使用剃刀在 umbraco 中针对博客创建 rss 提要时遇到问题。下面的代码有效,但只要我尝试将任何值添加到项目节点下的链接标记中,我就会收到一个 xml 错误,下面是代码。

<rss version="2.0">
    <channel>
        <title>@landing.uBlogsyRssTitle</title>
        <description>@landing.uBlogsyRssDescription</description>
        <copyright>@landing.uBlogsyRssCopyright</copyright>
        @*<image>@landing.uBlogsyRssImage</image>*@
        <link>@Request.Url.Host@landing.Url</link>
        <lastBuildDate>@lastPubDate.FormatDateTime("ddd, dd MMMM yyyy HH:mm:ss")</lastBuildDate>
        <pubDate>@lastPubDate.FormatDateTime("ddd, dd MMMM yyyy HH:mm:ss")</pubDate>
        @foreach (var p in posts)
        {
        <item>
            <title>@p.GetProperty("uBlogsyContentTitle").Value</title>            
            <link></link>
            <author>@p.GetProperty("uBlogsyPostAuthor").Value</author>
            <description>@p.GetProperty("uBlogsyContentBody").Value.StripHtml().Trim()</description>            
            <guid>@p.Url</guid>
            <pubDate>@p.GetProperty("uBlogsyPostDate").Value.FormatDateTime("ddd, dd MMMM yyyy HH:mm:ss")</pubDate>
        </item>
        }
</channel>
</rss>
4

1 回答 1

4

这是我对另一个解决了同样问题的帖子的回答:

由于 MVC4 Razor 验证您尝试编写的内容是有效的 HTML。如果你不这样做,Razor 就会失败。

您的代码试图编写不正确的 HTML:

如果您查看w3schools 中链接标签的文档,您可以阅读以不同方式表达的相同内容:

  • “该元素是一个空元素,它只包含属性。”
  • “在 HTML 中,标签没有结束标签。”

这意味着链接是一个单例标签,因此您必须将此标签写为自闭合标签,如下所示:

<link atrib1='value1' attrib2='value2' />

所以你不能做你想做的事情:使用带有内容的开始和结束标签。

这就是 Razor 无法生成此<xml>文档的原因。

但是有一种方法可以欺骗 Razor:不要让它知道你正在编写标签,如下所示:

@Html.Raw("<link>")--your link's content--@Html.Raw("</link>")

请记住,Razor 用于编写 HTML,因此使用它编写 XML 可能会有些棘手。

于 2013-02-25T00:31:15.290 回答