【IT168 技术文档】
一、 AdRotator控件的三种数据源模式
AdRotator以三种不同的模式填充它的图像和导航属性,我把它们分别称为“数据库模式”,“XML模式”和“编程模式”。
(一) 数据库模式
在数据库模式下,一个AdRotator链接到一个数据源。该数据源表格至少需要三个数据列:一个相应于图像的URL,一个相应于该图像被点击时要导航到的URL,一个相应于要在该图像的ALT标签中被显示的字符串。下列是数据源表格中的可用字段,其中后面几个是可选的:
列名称 | 数据类型 | 说明 |
ID | int | 这是主键。此列可给定任何名称。 |
ImageUrl | nvarchar(length) | 要作为广告显示的图像的相对或绝对URL。 |
NavigateUrl | nvarchar(length) | 广告的目标URL。如果没有提供值,则广告不是一个超链接。 |
AlternateText | nvarchar(length) | 找不到图像时显示的文本。有些浏览器中,该文本还会作为工具提示显示出来。替换文字也用于辅助功能,以便无法看到图形的用户可以听到大声读出的说明。 |
Keyword | nvarchar(length) | 可作为页筛选依据的广告类别,可选。 |
Impressions | int(4) | 一个指示广告的可能显示频率的数字。数字越大,显示该广告的频率越高。在XML文件中,所有Impressions值的总和不能超过2,048,000,000-1。可选。 |
Width | int(4) | 图像的宽度(以像素为单位),可选。 |
Height | int(4) | 图像的宽度(以像素为单位),可选。 |
【注意】上表中提供的数据类型是SQL Server类型。如果使用的是不同的数据库,请替换相应的合适类型。
当然,借助于ASP.NET 2.0强大的数据源数据处理功能,你并不需要一个类似这样的数据表格,你只要在DataSource本身使用一个SQL语句把该数据“拖入”到适当的结构中。比如说,如果你是动态地显示SQL Server 2005 AdventureWorks示例数据库ProductPhoto表格中图像的缩略图,并且允许在点击一下这个缩略图后能够重定向到在同一个表格中的LargePhoto图像(也是动态生成的)并且使用该产品表格中的一个描述来表示相应的可选文本,那么你可以象下列这样来使用:
<asp:SqlDataSource ID="ProductPhotos"
runat="server"
ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>"
SelectCommand="SELECT Production.ProductPhoto.ProductPhotoID AS ID,
'./ProductThumbNail.ashx?ID=' + LTRIM(STR(Production.ProductPhoto.ProductPhotoID)) AS ImageUrl,
'./ProductPhoto.ashx?ID=' + LTRIM(STR(Production.ProductPhoto.ProductPhotoID)) AS NavigateUrl,
Production.Product.Name AS AlternateText
FROM Production.ProductPhoto
INNER JOIN Production.ProductProductPhoto
ON Production.ProductPhoto.ProductPhotoID = Production.ProductProductPhoto.ProductPhotoID
INNER JOIN Production.Product
ON Production.ProductProductPhoto.ProductID = Production.Product.ProductID">
</asp:SqlDataSource>
上面的代码将产生一个具有四栏的结果集。之后,AdRotator控件看起来如下所示:
<asp:AdRotator ID="AdRotator1" runat="server" DataSourceID="ProductPhotos" />
这里的所有属性(除了DataSourceID及其名字外)都为其缺省值,因为我已经在DataSource的定义中使用缺省名来描述这些域。
(二) XML模式
另一种填充一个AdRotator的域的方式是使用一个静态XML文件,它有一个类似于表格模式的结构。本文下载源码中包含一个完整的示例。下面是一个简单摘要(一个称为Advertisments.xml的文件):
<Ad>
<ImageUrl>~/ProductThumbNail.ashx?ID=70</ImageUrl>
<NavigateUrl>~/ProductPhoto.ashx?ID=70</NavigateUrl>
<AlternateText>Product Number 70</AlternateText>
<Impressions>100</Impressions>
</Ad>
现在,该AdRotator看起来如下所示:
<asp:AdRotator ID="AdRotator2" runat="server" AdvertisementFile="~/Advertisments.xml" />
在此,我们也是使用了缺省值。
(三) 编程模式
无论AdRotator的AdCreated事件何时激发,都以编程方式填充该属性。此时,一个AdCreatedEventArgs对象被传递到事件处理器;而且你要设置三个属性:ImageURL,NavigateURL和AlternateText—它们都是用于生成控件之用的。
至此,该AdRotator控件看起来如下所示:
<asp:AdRotator ID="AdRotator3" runat="server" OnAdCreated="AdRotator3_AdCreated"/>
在code-behind文件中,我仅绑定了一个事件处理器:
protected void AdRotator3_AdCreated(object sender, AdCreatedEventArgs e) ...{
int ProductID = 1;
e.ImageUrl = "~/ProductThumbNail.ashx?ID=" + ProductID.ToString();
e.NavigateUrl = "~/ProductPhoto.ashx?ID=" + ProductID.ToString();
e.AlternateText = "以编程方式从产品ID生成文本 " + ProductID.ToString();
}
这种情况可能非常有用。例如,你可以实现基于用户的导航历史,或基于他们已经实现的个性化或任何其它标准来实时的图像定位。