我可以创建一个在asp.net mvc 3中呈现Rss的Razor视图吗?

时间:2013-02-10 08:07:23

标签: asp.net asp.net-mvc asp.net-mvc-3 razor rss

我知道要生成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,我将如何使用这些辅助方法?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

您的视图代码正在生成html,而不是rss Feed所需的xml(您包含的是divh3等属于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中进行说明。