通过自定义控件添加RSS提要

分享于 

8分钟阅读

Web开发

  繁體

介绍

本文描述了一个非常简单的自定义服务器控件的构造,它用于显示从RSS提要返回的内容。 控件使用 public web服务从RSS提要检索当前数据,控件将显示内容以及用户定义的标签。 public 服务将提要内容作为直接HTML返回,这大大简化了显示数据的过程。

图 1: 使用中的RSS提要自定义控件

入门

包含的文件包括一个网页控制库项目和一个示范网站。 要开始,打开包含的压缩文件并将两个项目安装到你的文件系统中。 打开IIS并为web应用程序创建一个虚拟目录。 将解决方案打开 Visual Studio 2005并进行任何必要的更改以将两个项目都放入解决方案中。 配置好后,解决方案资源管理器应该显示这些项目,引用和文件:

图 2: 带有网络应用程序和控制库的解决方案资源管理器

在检查解决方案时,注意RSS控件库只包含一个控件,该控件称为"rsscontrol"。 这个项目还包括一个指向 http://www.webservicex.net/WS/WSDetails.aspx?WSID=54&CATID=12;的网页引用这个 public 站点提供了web服务web方法,这个方法检索RSS提要内容,并通过web方法将它转换成 HTML。

web应用程序只包含一个网页( Default.aspx ),并包含对 RSS DLL的引用。 它还包含对我的天气预报DLL的引用,我将它的添加到项目中作为 eye。

web应用程序用作用于测试自定义控件的容器。 页面本身不包含其他代码;页面上有4 个独立的RSS控件实例,以及一个天气预测控件的单个实例。 RSS控件都指向由纽约时报提供的不同RSS源。

代码:RSS控件

在初始化时,构造RSS自定义控件来从web服务检索信息;检索的信息是由web服务转换为HTML的内容。 初始化时,检索HTML并在呈现控件时添加label控件,并设置它的文本属性以显示 HTML。 控件公开两个感兴趣的属性,一个是提要的RSS URL,另一个是RSS控件的标题。 标题和RSS提要属性可以由用户设置。

在检查代码时,注意项目中只包含默认导入。 类本身从 WebControl 类继承。

Imports SystemImports System.Collections.GenericImports System.ComponentModelImports System.TextImports System.WebImports System.Web.UIImports System.Web.UI.WebControls
<ToolboxData("<{0}:RssCC runat="server"></{0}:RssCC>")> _PublicClass RssCC
 Inherits WebControl

在声明区域中声明四个成员变量;一个用于web服务,用户定义RSS源标题。

#Region"Declarations"Private mNews As net.webservicex.www.RSStoHTML
 Private mMessage AsStringPrivate mRssUrl AsStringPrivate mRssTitle AsString#End Region

接下来是包含RSS控件的初始化事件处理程序的方法区域:

#Region"Methods" 
 PrivateSub RssCC_Init(ByVal sender AsObject, _
 ByVal e As System.EventArgs) _
 HandlesMe.Init
 IfNot RssFeed IsString.Empty Then mNews = New net.webservicex.www.RSStoHTML
 mMessage = mNews.GetHTML(RssFeed)
 EndIfEndSub#End Region

初始事件处理程序检查 RssFeed 属性是否为空,如果没有,它会使用服务返回的信息的HTML版本来调用 Web服务 GetHTML web方法填充消息成员变量。

项目中的下一个区域称为"属性",它包含控件。RssFeedRssFeedTitle 使用的两个属性。 属性更新或者读取 private 成员变量的内容以管理它的内容。 RssFeed 属性用于包含到RSS源的路径,而 RssFeedTitle 属性允许用户键入控件的标题。

#Region"Properties" 
 <Category("RSS Feed")> _
 <Browsable(True)> _
 <Description("Enter the URL for the RSS Feed.")> _
 PublicProperty RssFeed() AsStringGetReturn mRssUrl
 EndGetSet(ByVal value AsString)
 mRssUrl = value
 EndSetEndProperty <Category("RSS Feed")> _
 <Browsable(True)> _
 <Description("Enter the title for the RSS Feed.")> _
 PublicProperty RssFeedTitle() AsStringGetReturn mRssTitle
 EndGetSet(ByVal value AsString)
 mRssTitle = value
 EndSetEndProperty#End Region

最后的细节是呈现;这里 RenderContents 被重写,并且在 尝试- 捕捉 block,一组嵌套 Div 在主节点中创建 Div 有两个单独 Div 1,保存用户定义的提要标题,其中一个用来显示 HTML。 在这两个实例中,内容由添加到 Div 如果呈现操作失败,则控件将向用户显示"rss源脱机"。

#Region"Rendering" 
 ProtectedOverridesSub RenderContents(ByVal output As HtmlTextWriter)
 Try output.AddAttribute(HtmlTextWriterAttribute.Align, "center")
 output.AddAttribute(HtmlTextWriterAttribute.Valign, "top")
 output.AddAttribute(HtmlTextWriterAttribute.Width, "100%")
 output.RenderBeginTag(HtmlTextWriterTag.Div)
 output.AddAttribute(HtmlTextWriterAttribute.Align, "left")
 output.AddAttribute(HtmlTextWriterAttribute.Valign, "top")
 output.AddAttribute(HtmlTextWriterAttribute.Width, "50%")
 output.RenderBeginTag(HtmlTextWriterTag.Div)
 Dim lbl AsNew Label
 lbl.ID = "lblRssTitle" lbl.Text = "<b>" & Me.RssFeedTitle.ToString() & "</b>" lbl.RenderControl(output)
 output.RenderEndTag()
 output.AddAttribute(HtmlTextWriterAttribute.Align, "left")
 output.AddAttribute(HtmlTextWriterAttribute.Valign, "top")
 output.AddAttribute(HtmlTextWriterAttribute.Width, "50%")
 output.RenderBeginTag(HtmlTextWriterTag.Div)
 Dim lbl2 AsNew Label
 lbl2.ID = "lblRssContent" lbl2.Text = mMessage.ToString()
 lbl2.RenderControl(output)
 output.RenderEndTag()
 output.RenderEndTag()
 Catch output.RenderBeginTag(HtmlTextWriterTag.Div)
 output.Write("RSS Feed Offline")
 output.RenderEndTag()
 EndTryEndSub#End Region

摘要

这个项目演示了一种非常简单的方法,可以通过使用定制服务器控件和 Web服务 来在网页上显示RSS提要内容。 控件只显示来自RSS站点的当前或者最后一个提要;必须随时捕获并存储多个feed消息。 使用与数据库内容相同的存储字符串,可以使用相同的web服务web方法完成这里任务,这些存储的字符串可以用于将提要内容的HTML版本填充到本演示中使用的类似的方式。


相关文章