我有一个使用RazorEngine v3.4.1的模板:
@{ var Title = Model.Page.Title ;
var Description = Model.Page.Description;
var Articles = Model.Site.Articles;
var SiteUrl = Model.Site.WebsiteUrl;
}
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>@Title</title>
<description>@Description</description>
<link>@SiteUrl</link>
<lastBuildDate>@DateTime.Now</lastBuildDate>
<pubDate>@DateTime.Now</pubDate>
@foreach(var Article in Articles){
<item>
<title>@Article.Title</title>
<description>@Article.Description</description>
<link>@Article.Url</link>
<guid>@Article.Url</guid>
<pubDate>@Article.Date.ToString()</pubDate>
</item>
}
</channel>
</rss>当我试图编译它时,它抛出TemplateParsingException,它说:
"item“元素未关闭。所有元素必须是自关闭的或具有匹配的结束标记.
当我从模板中删除这一行时:
<link>@Article.Url</link>它编译得很好,没有任何问题,结果和预期的一样.
我做错了什么?
发布于 2014-03-31 15:11:03
MS在Razor 2中增加了对HTML5空元素的支持,这就是为什么您会看到这个问题。最简单的解决方案就是转义标记,以便Razor将它们看作文字,即@:
适用于此的元素的完整列表(取自System.Web.Razor.Parser.HtmlMarkupParser)
"area",
"base",
"br",
"col",
"command",
"embed",
"hr",
"img",
"input",
"keygen",
"link",
"meta",
"param",
"source",
"track",
"wbr"发布于 2015-11-06 08:34:26
剃刀检查HTML5的兼容性,并且链接标签与内容是无效的,因为它是void元素。有关HTML元素的更多信息:http://w3c.github.io/html-reference/syntax.html#void-element
以下是HTML中空元素的完整列表: 区域,基地,br,col,命令,嵌入,hr,img,输入,keygen,链接,元,param,源,跟踪,wbr
在RazorEngine 中,无需使用@Html.Raw之类的MVC Html助手的解决方案是添加以下内容之一:
@(new RazorEngine.Text.RawString("<link>" + Article.Url + "</link>"))
@Raw("<link>" + Article.Url + "</link>")另外,如果希望使用像@Html.Raw这样的语法,则可以使用自己的类扩展模板语法,如doc https://matthid.github.io/RazorEngine/TemplateBasics.html#Extending-the-template-Syntax中所示。
https://stackoverflow.com/questions/22281377
复制相似问题