ASP.NET MVC 3 を使用して RSS フィードの XML をレンダリングするビュー (.cshtml) があり、正常に動作しました。Razor 2 で ASP.NET MVC 4 にアップグレードしたので、以下のようなコンパイル エラーが発生します。
Parser Error
Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.
Parser Error Message: Encountered end tag "item" with no matching start tag. Are your start/end tags properly balanced?
タグは適切にバランスが取れています。
誰にも考えはありますか?
更新: @foreach (...) { ... } ブロック内のitem要素内のlink要素に分離しました。
@foreach (var item in Model.Items)
{
<item>
<title>@item.Title</title>
<link>@item.Link</link>
<description>@item.Description</description>
<guid>@item.Guid</guid>
@if (item.PublishedDateUtc.HasValue)
{
<pubDate>@item.PublishedDateUtc.Value.ToString("ddd, dd MMM yyyy HH:mm:ss") GMT</pubDate>
}
</item>
}
以下の@Html.Rawを使用して修正しました。
@foreach (var item in Model.Items)
{
<item>
<title>@item.Title</title>
@Html.Raw(string.Format("<link>{0}</link>", item.Link.ToHtmlEncoded()))
<description>@item.Description</description>
<guid>@item.Guid</guid>
@if (item.PublishedDateUtc.HasValue)
{
<pubDate>@item.PublishedDateUtc.Value.ToString("ddd, dd MMM yyyy HH:mm:ss") GMT</pubDate>
}
</item>
}
誰にもより良い提案がありますか?明らかに、クラスを使用してモデルを宣言し、XML をコントローラーから直接返すこともできますが、この動作が発生する理由と、Razor 構文によりよく準拠するために何ができるかについて、もっと興味があります。