您的位置:首页 > 编程语言 > ASP

Asp.Net MVC实践 - 自定义ActionResult实现Rss输出 (基于ASP.NET MVC Preview 3)

2008-05-29 19:02 627 查看
前两天才做了一个Asp.Net MVC Preview2的实践,没想到这就升级到了Asp.Net Preview3了,Preview3确实比2好上不少,特别有两个地方值得注意,一是Route新增了MapRoute方法,可以更方便添加Url路由规则,二是修改了View的部分,使得Action统一返回ActionResult,更方便我们定制View.
今天我要实践的就是使用Priview3提供的新特性,通过自定义ActionResult实现Rss输出.

Rss在web系统中相当常见,主要用于快速浏览站点更新的文章等内容,是web2.0的主要特性之一,以前我们是如何来实现Rss输入的呢?在aspx中输出?自定义HttpHandle?自然是可以,但是到了MVC框架中,我们可以选中更好的方式,自定义ActionResult.

根据官方资料,每个Action都要返回一个ActionResult来执行View,而ActionResult是一个抽象类,我们现在必须的就是自定义一个RssAction.

首先根据需要建立一个ArticleResultDemo的Asp.Net Web Application.然后根据mvc约定建立相关文件夹和文件,为了实现rss输出,我添加以下文件,如图:

public static string ToXmlString(this RssItem item)

public static string ToXmlString(this RssImage image)

public static string ToXmlString(this RssEntity rss)

public static RssEntity ToDefaultRss(this IList<ArticleEntity> articleList)

private static string ToXmlItem<DType>(DType data)

where DType : class

通过这些方法,我们可以方便生成rss数据.

再看RssResult类.该类继承自ActionResult类,实现了ExecuteResult方法.该方法为: ExecuteResult(ControllerContext context)我们可以在其中直接将rss数据输出.这便是ActionResult的魅力了,我们通过RssEntity+RssAction完全对实体-xml输出进行了封装,使得程序可以非常方便的实现rss输出.现给出RssResult的代码:

public RssResult()

public RssResult(Encoding encode)

public RssResult(RssEntity data, Encoding encode)

public override void ExecuteResult(ControllerContext context)

为了更方便使用这个RssResult,我们可以对Controller进行进一步的改写,这儿我参照了Json方法的方式实现了DemoController,代码如下:

public abstract class DemoController : Controller

由于这两个Rss方法并非Action,因此加上了[NonAction]的Attubite.

现在我们再使用就非常方便了,在ArticleController中,实现一个Rss方法

public ActionResult Rss()

一部直接输出了rss.最后修改web.config,添加route等完成之后,执行图如下:



说明一下,在priview3的官方说明中,为了使得默认首页可用,可以添加一个default.aspx文件,然后在页面中加入一行

<% Response.Redirect("article/rss")%>

我看到有朋友质疑说这个语法错误了,没有加分号,其实这是.net默认语言的问题,如果你不修改.net的配置,默认aspx的语言是vb.net的,因此这行是没有任何问题的.

最后给出该Demo的全部工程文件下载.

点击下载该工程文件

个人Blog同步更新:http://blog.leven.com.cn/Article_28.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: