2

我知道要生成 rss,我可以使用 SyndicationFeed 和 Rss20FeedFormatter 等内置类。我也知道它可以通过自定义类和 aspx 视图来完成。

但是如果我想创建自定义提要对象和自定义视图,我可以使用 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 而不是我需要将我的提要对象序列化为 xml 文档并使用自定义 XmlResult 返回它:ActionResult?

编辑 1:Mabby 我可以以某种方式同时使用内置类和自定义提要模型吗?

编辑 2:我不想使用现有类的原因是因为我需要使用 Html.ActionLink() 和 Url.Action() 助手。如果我将提要对象序列化为 xml,我将如何使用这些辅助方法?

提前感谢您的帮助!

4

1 回答 1

3

您的视图代码正在生成 html,而不是 rss 提要所需的 xml(您正在包含类似 html 的元素divh3

要生成输出 RSS 的视图,视图的布局应该复制RSS 标准

例如:

@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>

但是,您可能需要考虑一种不同的方法:从您的控制器操作返回一个结果,该结果将直接生成 RSS。您可以在此博客文章中查看此方法的示例或在此答案中进行描述。

于 2013-02-11T20:47:15.840 回答