用ASP.NET建立一个在线RSS新闻聚合器(2)
在 ASP.NET 页面中使用聚合摘要
为了测试我们刚建立的聚合引擎,我们将创建一个在线新闻聚合器,允许采集任意数量的聚合内容摘要。聚合器的界面很简单,参见图二。它包括三个框架页面。左边框架以列表形式列出了不同的聚合内容摘要。右上部框架显示所选的聚合内容摘要包含的新闻项以及查看该新闻项的链接。最后,在右下部框架则显示选中的新闻项标题和内容。顺便提及一下,这样的界面基本上是各种类型的聚合器的一个事实上的标准界面,包括新闻聚合器、email客户端软件和新闻组阅读器都是这样的界面。
图二 新闻聚合器用户界面的截图
第一步是创建一个html页面来建立框架用户界面。幸运的是,在Visual Studio.NET 2003 中,这一过程非常容易。只需要在Web应用程序解决方案中添加一个新 的项目,选择新项目类型为 Frameset。(我在我的工程中将这个新文件命名为 NewsAggregator.htm。我之所以将它设置为 html 文件而不是 asp.net 页面, 是因为这个页面只包括建立框架的 html 代码。每一个单独的框架会显示一个 asp.net 页面)。下一步,参见图三,Frameset 模版向导会启动,简单地选择选项“Nested Hierarchy”,然后按ok按钮就可以了。
图三 VS2003 中 Frameset 模版向导画面
然后 Frameset 模版向导会创建一个HTML页面,里面已经加入了框架的源代码。 只要将左边框架的src属性设置为 DisplayFeeds.aspx,它是列表显示聚合摘要 asp.net 页面的 url。至此 NewsAggreator.htm 页面就完成了。
以下三个部分,我们将讲述如何创建在线新闻聚合器的三个组件,它们分别是显示聚合摘要列表的 DisplayFeeds.aspx;显示特定聚合摘要新闻项 的 DisplayNewsItems.aspx;以及显示指定聚合摘要特定新闻项具体内容的 DisplayItem.aspx。
显示聚合摘要列表
现在我们需要创建 DisplayFeeds.aspx 页面。该页面要显示订阅的聚合摘要列表。作为示范,我将这些聚合摘要放在一个叫 Feeds 的数据库表中。当然你也可以将它们放在一个XML文件中。表 Feeds 有如下四个字段:
·FeedID—主键,自增长整数类型,唯一标示一个摘要
·Title—摘要名称,数据库字段类型:varchar(50)
·URL—RSS 摘要的 URL,数据库字段类型:varchar(150)
·UpdateInterval—摘要更新频率(分钟),数据库字段类型:int
DisplayFeeds.aspx 页面使用一个 DataGrid 控件显示聚合摘要的列表。这个 DataGrid 只有一个 HyperLinkColumn 列,显示 Title 字段的内容并且链接到 DisplayNewsItems.aspx 页面, 在查询字符串中 要传递 FeedID 字段的值。以下是 DataGrid 控件的声明,为简单起见,省略了一些无关的部分): <asp:DataGrid id="dgFeeds" runat="server"
AutoGenerateColumns="False" ...>
...
<Columns>
<asp:HyperLinkColumn Target="rtop"
DataNavigateUrlField="FeedID"
DataNavigateUrlFormatString="DisplayNewsItems.aspx?FeedID={0}"
DataTextField="Title" HeaderText="RSS Feeds">
</asp:HyperLinkColumn>
</Columns>
</asp:DataGrid>
这里要注意的关键是 HyperLinkColumn 列的定义。它的 Target 属性设置为右上部分框架的名称,这样当用户点击的时候,DisplayNewsItems.aspx 页面就会显示在右上部分的框架中。另外, 属性 DataNavigateUrlField、DataNavigateUrlFormatString 和 DataTextField 也做了相应的设置, 以便超链接显示摘要的标题,并且当点击它时,就会将用户带到 DisplayNewsItems.aspx 页面,并在查询串中将 FeedID 字段的内容传 过来。(该页面的后台代码类只访问来自 Feeds 表的摘要清单,按照 Title 字段的字母顺序返回,接着将查询结果绑定到 DataGrid 控件。 由于篇幅所限,本文在此不列出代码。)