日期:2010-07-12 浏览次数:20416 次
摘要:
介绍创建自定义、编译的 ASP.NET 服务器控件涉及的步骤,这种控件对所有的特定内容进行随机滚动,就像内置的 AdRotator 控件随机滚动一系列预定义的标语广告一样。在介绍 ContentRotator 控件的核心内容时,本文涉及到自定义 ASP.NET 控件开发的几个方面。
简介
早在九十年代末期,似乎没有什么事情是不可能发生的。World Wide Web 及其对商业的影响急剧增加 — 孩子们退学建立 Web 站点而一夜暴富,企业也斥资数百万美元在黄金电视时段播放广告,吸引人们上网为宠物购买食物。没错,这就是新经济时代,相比于在令人乏味的建筑物中销售单调的旧产品而言,将数百万的 Web 网民吸引到 Web 站点来的确更有经济价值。
在这个浮华的时代,Microsoft 引入了 传统 ASP 的 AdRotator COM 组件,它使崭露头角的 Web 企业家能够将标语广告轻松添加到他们的站点中。显示标语广告的第一步是具有一个列出可以显示的标语的 advertisements 文件。该文本文件包含有关每个标语的四类信息:
• 指向该标语图像的 URL
• 该图像链接到的 URL
• 该图像的替换文本
• 该标语相对于文件中其他标语的显示频率
使用该文本文件时,ASP 开发人员必需调用 AdRotator 的 GetAdvertisement(advertisementFile) 方法,从而传入到 advertisements 文件的路径,而 AdRotator 将返回 HTML 标记,用于显示从指定文件随机选择的标语广告。我想,这时候已经财源滚滚了。
2002 年交付 ASP.NET 时,新经济时代已经成为过去。NASDAQ 指数在 2000 年曾经攀升至 5,000 点左右,而现在已跌到 2,000 点以下。尽管 .com 彻底垮台,但 Microsoft 依旧对在线广告持乐观态度,缘由是他们已修整了 传统 ASP 的 AdRotator 控件并进行了发布 — 作为一个标准 Web 控件与 ASP.NET 一起提供。AdRotator 的 ASP.NET 版本较之传统的 ASP 版本有以下几个优势:
• advertisements 文件现已是 XML 格式化的,从而使页面开发人员可以更轻松地创建和编辑该文件的内容。
• 每个广告可以包含一个指示其所属类别的关键字。除了 AdRotator 的新 KeywordFilter 属性之外,这可用来限制针对具体 AdRotator 控件实例显示的标语集。
• 除了标准的广告属性集之外,页面开发人员可以将他们自己的附加设置添加到 advertisements 文件中。然后,添加的这些设置可由页面开发人员通过 AdRotator 的 AdCreated 事件以编程方式访问。
虽然 AdRotator 能更容易地随机显示来自预定义列表的标语,但是它存在很多缺点,在我看来,其中有两个主要的缺点:
1.AdRotator 的内容只可以通过 XML 格式化的 advertisements 文件进行指定。这虽然不是一个主要限制,但是如果能够通过 AdRotator 的标记以声明方式指定内容,或者通过源代码以编程方式进行指定,则是比较理想的,这非常类似于针对 DropDownList Web 控件以声明方式或编程方式指定 ListItem。
2.AdRotator 在它可以生成的标记方面受到一些限制。顾名思义,它旨在显示广告,这些广告是文本或链接到某个 URL 的图像。只需进行少量工作,就可以将 AdRotator 创建为显示任何 类型的内容,而不仅仅是标语或文本广告。
第二个缺点特别让我感到烦恼,因为只需再进行少量工作就可以使 AdRotator 成为一个非常通用的内容滚动器,而不仅仅设计为只显示广告。在本文中,我们将通过创建一个全功能的 ContentRotator 服务器控件来克服该缺点以及其他缺点。
考虑内容滚动
在深入研究任何编码项目之前,重要的是用充足的时间回答以下三个问题。
1. 有满足我需要的现有控件吗?如果您的工作和我类似,就是说每天有很多会议和电子邮件,还要花费更多时间进行其他繁忙的工作,则编写代码通常是一天中最有趣的活动。如果对问题产生了兴趣并通过代码找到该问题的解决方案,那么没有什么比这让令人兴奋了。
但是,“有趣”与“具有经济价值”可完全是两码事。创建具体控件可能是有趣的,但如果已经存在能够提供所需功能的控件,那么花费时间生成、测试和调整此类控件就毫无经济意义可言。
当我想创建新的服务器控件时,我首先会进入 ASP.NET Control Gallery,看看我是不是在做无用功。快速查看 Control Gallery,显示用于 Content Rotators 的一个完整类别。但是,这些内容滚动器(例如,新闻或股票自动接收器)的大多数都在单个页面滚动所有的内容。
我发现有一个控件可以滚动完整的诸如 AdRotator 控件(Duncan Mackenzie 的ContentRotator 用户控件,详述于文章 Rotating Is Fun)的任意静态 HTML 内容。虽然 Duncan 的用户控件提供了 AdRotator 的基本功能且支持任意 HTML 内容,但我决定不使用他的解决方案,因为它并不提供我需要的功能。(例如,Duncan 的控件不允许为内容标记关键字。)
在搜索过程中,我没有找到满足需要的内容滚动器。因此我决定自己创建。(哈哈!老板,会议请先等一下吧,我现在要马上完成一个编程项目!)
2. 我的控件需要提供什么功能?如果您决定创建自己的控件,请不要立即深入到最有趣的部分 — 编码;相反,您需要在开始编码之前清楚地了解该控件需要具有哪些功能。确定控件要求的一个好方法是设计常规用例,这些用例描述最终用户(在本例中是页面开发人员)将如何使用您的控件。在生成服务器控件时,我首先要自问的几个问题是:
• 页面开发人员将如何使用该控件?
• 他们需要该控件做什么?
• 语法应该如何?
在经过一番深思熟虑之后,我设计了以下四个用例:
Harry(一个很有前途的 ASP.NET 开发人员)想增强其公司的 Intranet,以便主页可以随机显示一个公司雇员的简历和照片。由于 Harry 的公司只有十多个雇员,因此他目前喜欢在一个文件中硬编码简历和照片,但希望日后可以对其进行升级,以便随着公司的发展从数据库检索这些项。他的目标是让 ContentRotator 从该文件随机选择一个雇员,每次访问时在主页上显示有关该雇员的信息。
Jisun 是 BuyPetFoodOnline.com 的一位开发人员,这个网站是新启动的,关于它的风险投资能否取得回报都寄希望于 John Q 身上。大家对在线购买 Alpo 很感兴趣。BuyPetFoodOnline.com 上销售的所有宠物食物品牌都在一个 Microsoft SQL Server 数据库中维护。在该站点的主页上,Jisun 想显示最畅销的 10 种宠物食物品牌列表,或者各类狗食列表或猫食列表。此外,她希望每当狗食或猫食的内容组合时,最畅销的十个销售品牌内容平均显示两次。
Todd 运行一个有关健身的 Web 站点,目前已有数千名会员在该站点上注册,注册信息包括姓名、出生日期、体重以及其他和健康相关的数据。在每页的底部,Jim 想针对访问者的个人信息显示随机健康统计信息。例如,他想显示以下消息:[[username]]、您已经活了 [[numberOfDaysSinceBirth]] 天、您的平均脉搏是 [[averageHeartRateTimesDaysAlive]],其中每一个占位符均用特定于登录用户的值进行填充。
成长中的 ASP.NET 开发人员 Darren 是一个 XML 的新手,他很担心在 XML 格式化的内容文件中指定内容项时会犯错误。Darren 非常熟悉 DropDownList Web 控件,经常使用 DropDownList 的描述性语法指定 ListItem。Darren 也希望能够以相同的方式为 ContentRotator 指定内容项。同样,他将能够以编程方式操作 ContentRotator 的内容项,使用的语法类似于以编程方式使用 DropDownList 的 ListItem 所需的语法。