AdRotator控件
AdRotator Control
这个控件之所以被称为AdRotator,是因为它常用于在页面上显示广告。该控件从列表中随机显示一个图片。这个列表可以是存储在单独的XML文件或数据绑定的数据源中的。无论哪一种,列表都会包含图片的属性、路径及单击图片时链接到的URL。图片将在每次页面加载时更改。
除了从WebControl继承的属性外,表5-10列出了AdRotator控件包含的其他属性和事件。
表5-10 AdRotator控件的属性和事件
名 称 | 类 型 | 读 | 写 | 说 明 |
AdvertisementFile | String | × | × | 包含广告及广告属性列表的XML路径。该文件在后面详细介绍 |
AlternateTextField | String | × | × | 广告文件或数据字段的元素名称,在其中储存了替换文本。默认值为AlternateText |
DataMember | String | × | × | 控件将绑定到的数据列表的名称 |
DataSource | Object | × | × | 控件将要从中获取数据的对象 |
DataSourceID | String | × | × | 控件将要从中获取数据的控件的ID |
ImageUrlField | String | × | × | 广告文件或数据字段的元素名称,其中储存了图片的URL。默认值为ImageUrl |
续表5-10 AdRotator控件的属性和事件
名 称 | 类 型 | 读 | 写 | 说 明 |
KeywordFilter | String | × | × | 从广告文件中筛选广告的类别关键字 |
NavigateUrlField | String | × | × | 广告文件或数据字段的元素名称,在其中储存了要导航到的URL。默认值为NavigateUrl |
Target | String | × | × | 单击AdRotator时用于显示目录页面内容的浏览器窗口或框架 |
AdCreated | Event |
|
| 在控件创建后、呈现页面前,在每个到服务器的往返行程过程中发生 |
Target属性用于指定由哪个浏览器窗口或框架显示单击AdRotator控件后的结果页面。它指定是否用结果页面替换当前浏览器窗口或框架中显示的当前内容,或是打开一个新浏览器窗口,或是其他的操作。Target属性的值必须以小写的a到z中的字符开头,区分大小写,但表5-11中指定的值除外,它们以下画线开头,并与HyperLink控件的Target属性值相同。
表5-11 Target属性的特殊值
值 | 说 明 |
_blank | 在除框架之外未命名的新窗口呈现内容 |
_new | 未文档化。单击时的行为与_blank相同,只不过后续的单击将在同一个窗口呈现,而不用打开一个新窗口 |
_parent | 在链接所在窗口或框架的父窗口或框架呈现内容。如果子容器是一个窗口或顶级的框架,则与_self相同 |
_self | 在当前焦点所在的窗口或框架呈现内容。这是默认的行为 |
_top | 在当前无框架的的整个窗口中呈现内容 |
广告文件
Advertisement File
广告文件是一个XML文件,它包含了AdRotator控件显示的广告有关的信息。该文件的位置和文件名由控件的AdvertisementFile属性指定。
广告文件的位置可以是相对于网站的根目录,也可以是绝对路径。如果它的位置不在同一网站中,则要确保应用程序有权访问该文件,尤其在部署之后。正因为如此以及其他的一些安全原因,最好把该文件放在web根目录下。
AdvertisementFile属性不能和DataSource、DataMember或DataSourceID属性同
时设置。换言之,如果数据来源于一个广告文件,它就不能同时来源于数据源,反之亦然。
广告文件和AdvertisementFile属性是可选的。如果不使用广告文件,而是要以编程方式创建一个广告,则需要在AdCreated的事件中输入代码以显示希望的元素。
由于是一个XML文件,所以广告文件是一个使用已定义好的,使用标签描述数据的结构化文本文件。表5-12列出了标准标签,它们都包含在尖括号(< >)中,并需要一个匹配的关闭标签。
表5-12 在广告文件中使用的XML
标 签 | 说 明 |
Advertisements | 包含整个广告文件 |
Ad | 描述每一个单独的广告 |
ImageUrl | 要显示的图像的URL。必需 |
NavigateUrl | 单击该控件时定位到的URL |
AlternateText | 图像不可用时要显示的文本。在某些浏览器中,该文本显示为工具提示 |
Keyword | 广告类别。该关键字可用于通过设置KeywordFilter属性过滤要显示的广告 |
Impressions | 一个值,指示相对于XML文件中的其他广告,该广告显示的频率 |
提示:由于这是XML而非HTML,所以它比那些非结构化的文件更精简。这些标签都是区分大小写的:可以是ImageUrl,而ImageURL就不行。
关于结构化XML的完整描述,可参见第3章中“良构的XHTML”侧栏。
除了表5-12列出的标签,也可以包含自定义的标签以便拥有自定义属性。示例5-13中的示例广告文件,包含了一个名为Animal自定义属性,它用于维护每本书封面的动物图片。
示例5-13:ads.XML,示例广告文件
<Advertisements>
<Ad>
<ImageUrl>ProgAspNet.gif</ImageUrl>
<NavigateUrl>
http://www.oreilly.com/catalog/progaspdotnet2/index.html
</NavigateUrl>
<AlternateText>Programming ASP.NET</AlternateText>
<Keyword>Web</Keyword>
<Impressions>50</Impressions>
<Animal>stingray</Animal>
</Ad>
<Ad>
<ImageUrl>WinApps.gif</ImageUrl>
<NavigateUrl>
http://www.oreilly.com/catalog/pnetwinaps/index.html
</NavigateUrl>
<AlternateText>Programming .NET Windows Applications</AlternateText>
<Keyword>Windows</Keyword>
<Impressions>40</Impressions>
<Animal>darter</Animal>
</Ad>
<Ad>
<ImageUrl>ProgCSharp.gif</ImageUrl>
<NavigateUrl>
http://www.oreilly.com/catalog/progcsharp4/
</NavigateUrl>
<AlternateText>Programming C#</AlternateText>
<Keyword>Language</Keyword>
<Impressions>40</Impressions>
<Animal>African Crowned Crane</Animal>
</Ad>
<Ad>
<ImageUrl>ProgVB.gif</ImageUrl>
<NavigateUrl>
http://www.oreilly.com/catalog/progvb2005/
</NavigateUrl>
<AlternateText>Programming Visual Basic 2005</AlternateText>
<Keyword>Language</Keyword>
<Impressions>30</Impressions>
<Animal>catfish</Animal>
</Ad>
</Advertisements>
广告文件中所有的属性标签被分析后放到adProperties字典中。该字典可以用于以编程方式访问属性。无论是标准的或自定义的,都由AdCreated事件处理程序中的代码实现。
示例5-13显示了一个示例广告文件,它包含几本经典编程书籍的参考信息和网站。
使用AdRotator
Using AdRotator
现在需要的就是一个包含AdRotator控件的页面,该AdRotator控件将使用这个广告文件,如下面的示例AdRotatorDemo所示。以该名称创建一个新的网站后,拖放一
个AdRotator控件到页面上,并添加几个Label控件来显示动物。内容文件看起来类似于示例5-14。
示例5-14:AdRotatoDemo的Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W 3C //DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>AdRotator</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>AdRotator Control</h1>
<asp:AdRotator ID="ad" runat="server"
Target="_blank"
AdvertisementFile="ads.xml"
OnAdCreated="ad_AdCreated" />
<br />
Animal:
<asp:Label id="lblAnimal" runat="server"/>
</div>
</form>
</body>
</html>
在示例5-15的代码隐藏文件中高亮显示事件处理程序ad_AdCreated。
示例5-15:AdRotatorDemo网站的Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ad_AdCreated(object sender, AdCreatedEventArgs e)
{
if ((string)e.AdProperties["Animal"] != "")
lblAnimal.Text = (string)e.AdProperties["Animal"];
else
lblAnimal.Text = "n.a.";
}
}
确保该广告文件的名称为ads.xml,并位于网站根目录下,根目录下还包括几个广告文件用到的图片文件:ProgAspNet.gif,ProgCSharp.gif,ProgVB.gif 和WinApps.gif。
运行AdRotatorDemo的结果如图5-13所示。要看一下图片循环,在浏览器中刷新视图。
图5-13:AdRotatorDemo
该控件会引发AdCreated事件,该事件在每次回发到服务器且控件被创建之后呈现页面之前引发。控件声明中的OnAdCreated属性指定了该事件在引发时的事件处理程序。该事件处理程序传递一个AdCreatedEventArgs类型的参数,这个参数的属性在表5-13中列出。
表5-13 AdCreateEventArgs类的属性
属 性 | 说 明 |
AdProperties | 获取一个字典对象,该对象包含了广告文件中的所有对象 |
AlternateText | 广告图片无效时显示的替换文本. 如果浏览器支持工具提示,该文本将显示为工具提示 |
ImageUrl | 要显示的图片的URL |
NavigateUrl | 控件被单击时要显示的页面的URL |
每次改变广告后(也就是说,每次页面重新加载时),这个事件处理程序ad_AdCreated被引发并更新页面上的lblAnimal控件。 ad_AdCreated首先检测Animal属性中是否有值,如果没有,则显示“n.a”(即“not,available”)。
AdProperties属性返回一个Dictionary。当获取AdProperties属性时,它会隐式地调用Dictionary对象的Item方法,它返回一个与字典项相应的值,该字典项的关键字是Animal,该值然后被转换为字符串,在C#中,它使用下面的语法完成:
(string)e.AdProperties["Animal"]