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

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

问题描述:

我知道要生成rss我可以使用像SyndicationFeed和Rss20FeedFormatter这样的内置类。另外我知道它可以通过自定义类和aspx视图来完成。我可以创建一个在asp.net mvc 3中呈现Rss的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我以某种方式可以一起使用内置的类和自定义的饲料模型?

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

感谢您的帮助!

+0

您似乎忘记了您之前的问题,rss提要是一个xml文件。把HTML放入它不会工作。 – ZippyV 2013-02-11 13:11:51

+0

那么,我可以做的是将我的自定义feed对象序列化到xml中?如何实现“订阅”链接呢? – 2013-02-11 13:14:25

您的视图代码正在生成html,而不是rss订阅源所需的xml(您包含的元素如divh3是html的一部分)。

要生成输出RSS的视图,视图的布局应复制RSSstandard

例如:

@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。您可以在this blog post中看到此方法的示例或在this answer中描述。