我知道要生成rss,我可以使用内置类,如SyndicationFeed和Rss20FeedFormatter。另外我知道可以使用自定义类和aspx视图来完成。
但是如果我想创建自定义Feed对象和自定义视图,我可以使用razor吗?
以下是我的观点:
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<h2>@Model.Title</h2>
<div><b>Description:</b> @Model.Description</div>
<div><b>Language:</b> @Model.Language</div>
<a href="@Model.Url" class="averageLink">Subscribe to this Feed</a>
@foreach (var item in Model.Items)
{
<h3>
Title: @item.Title
</h3>
<div>
<img width="75" height="75" src="@Url.Action("GetImage", "Store", new { productId = item.ProductId })"/>
</div>
<div><b>Description:</b> @item.Description</div>
<div><b>Creator:</b> @item.Creator</div>
<div><b>Date published</b> @item.Published</div>
<div>
<a href="@item.Url" class="averageLink">place order on Ozon</a>
</div>
@Html.ActionLink("go to item", "ItemInformation", "Store", new {itemId = item.ItemId}, new {@class = "averageLink"})
}
</channel>
</rss>
其他问题:
1)我不知道如何实现“订阅”链接:分配给@ Model.Url的值是什么?
2)它生成html,mabby而不是我需要将我的feed对象序列化为xml文档并使用自定义XmlResult返回它:ActionResult?
编辑1:Mabby我可以在某种程度上使用内置类和自定义Feed模型吗?
编辑2:我不想使用现有类的原因是因为我需要使用Html.ActionLink()和Url.Action()助手。如果我将feed对象序列化为xml,我将如何使用这些辅助方法?
提前感谢您的帮助!
答案 0 :(得分:3)
您的视图代码正在生成html,而不是rss Feed所需的xml(您包含的是div
和h3
等属于html的元素。)
要生成输出RSS的视图,视图的布局应复制RSS standard。
例如:
@model MyProject.Models.RssModel
@{ Layout = null }
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>@model.FeedTitle</title>
<description>@model.FeedDescription</description>
<link>@model.FeedLink</link>
<lastBuildDate>@model.LastBuildDate</lastBuildDate>
<pubDate>@model.PubDate</pubDate>
<ttl>@model.Ttl</ttl>
@foreach (var item in Model.Items)
{
<item>
<title>@item.Title</title>
<description>@item.Description</description>
<link>@item.Url</link>
<guid>@item.Id</guid>
<pubDate>@item.PublicationDate</pubDate>
</item>
}
</channel>
</rss>
但是,您可能需要考虑另一种方法:从Controller Action返回将直接生成RSS的结果。您可以在this blog post中查看此方法的示例,或在this answer中进行说明。