Displaying Advertisements The AdRotator control enables you to randomly display different advertisements in a page.. You can provide each banner advertisement with a keyword and then fil
Trang 1CHAPTER 4 Using the Rich Controls
protected void calSchedule_DayRender(object sender, DayRenderEventArgs e)
{
if (schedule.FindRows(e.Day.Date).Length > 0)
e.Cell.BackColor = System.Drawing.Color.Yellow;
}
</script>
<html xmlns=”http://www.w3.org/1999/xhtml” >
<head id=”Head1” runat=”server”>
<title>Calendar Database</title>
</head>
<body>
<form id=”form1” runat=”server”>
<div>
<asp:Calendar
id=”calSchedule”
OnDayRender=”calSchedule_DayRender”
Runat=”server” />
<br />
<asp:FormView
id=”frmSchedule”
AllowPaging=”True”
DataKeyNames=”EntryDate”
DataSourceID=”srcSchedule”
Runat=”server”>
<EmptyDataTemplate>
<asp:LinkButton
id=”btnNew”
Text=”Add Entry”
CommandName=”New”
Runat=”server” />
</EmptyDataTemplate>
<ItemTemplate>
<h1><%# Eval(“EntryDate”, “{0:D}”) %></h1>
<%# Eval(“Entry”) %>
<br /><br />
<asp:LinkButton
Id=”btnEdit”
Text=”Edit Entry”
CommandName=”Edit”
Runat=”server” />
<asp:LinkButton
Id=”lnkDelete”
Trang 2Text=”Delete Entry”
CommandName=”Delete”
OnClientClick=”return confirm(‘Delete entry?’);”
Runat=”server” />
</ItemTemplate>
<EditItemTemplate>
<asp:Label
id=”lblEntry”
Text=”Entry:”
AssociatedControlID=”txtEntry”
Runat=”server” />
<br />
<asp:TextBox
id=”txtEntry”
Text=’<%#Bind(“Entry”) %>’
TextMode=”MultiLine”
Columns=”40”
Rows=”8”
Runat=”server” />
<br />
<asp:LinkButton
id=”btnUpdate”
Text=”Update”
CommandName=”Update”
Runat=”server” />
</EditItemTemplate>
<InsertItemTemplate>
<asp:Label
id=”lblEntry”
Text=”Entry:”
AssociatedControlID=”txtEntry”
Runat=”server” />
<br />
<asp:TextBox
id=”txtEntry”
Text=’<%#Bind(“Entry”) %>’
TextMode=”MultiLine”
Columns=”40”
Rows=”8”
Runat=”server” />
<br />
<asp:Button
id=”btnInsert”
Text=”Insert”
CommandName=”Insert”
Runat=”server” />
Trang 3CHAPTER 4 Using the Rich Controls
</InsertItemTemplate>
</asp:FormView>
<asp:SqlDataSource
id=”srcSchedule”
ConnectionString=”Server=.\SQLExpress;Integrated Security=True;
AttachDbFileName=|DataDirectory|ScheduleDB.mdf;User Instance=True”
SelectCommand=”SELECT EntryDate,Entry FROM Schedule WHERE
➥EntryDate=@EntryDate”
InsertCommand=”INSERT Schedule (EntryDate,Entry) VALUES
➥(@EntryDate,@Entry)”
UpdateCommand=”UPDATE Schedule SET Entry=@Entry WHERE EntryDate=@EntryDate”
DELETECommand=”DELETE Schedule WHERE EntryDate=@EntryDate”
Runat=”server”>
<SelectParameters>
<asp:ControlParameter
Name=”EntryDate”
ControlID=”calSchedule”
PropertyName=”SelectedDate” />
</SelectParameters>
<InsertParameters>
<asp:ControlParameter
Name=”EntryDate”
ControlID=”calSchedule”
PropertyName=”SelectedDate” />
</InsertParameters>
</asp:SqlDataSource>
<asp:SqlDataSource
id=”srcCalendar”
ConnectionString=”Server=.\SQLExpress;Integrated Security=True;
AttachDbFileName=|DataDirectory|ScheduleDB.mdf;User Instance=True”
SelectCommand=”SELECT EntryDate FROM Schedule”
Runat=”server”>
</asp:SqlDataSource>
</div>
</form>
</body>
</html>
The page in Listing 4.10 saves and loads entries from a SQL Express database named
ScheduleDB The contents of the schedule are contained in a table named Schedule that
has the following schema:
Trang 4The tricky part in Listing 4.10 is the code for highlighting the current entries in the
calen-dar In the Page_PreRender event handler, a list of all the current entries is retrieved from
the database The list is represented by a DataView object
The DayRender event is raised when the Calendar renders each day (table cell) In the
DayRender event handler in Listing 4.10, if an entry is in the database that corresponds to
the day being rendered, the day is highlighted with a yellow background color
Displaying Advertisements
The AdRotator control enables you to randomly display different advertisements in a
page You can store the list of advertisements in either an XML file or in a database table
The AdRotator control supports the following properties (this is not a complete list):
AdvertisementFile—Enables you to specify the path to an XML file that contains a
list of banner advertisements
AlternateTextField—Enables you to specify the name of the field for displaying
alternate text for the banner advertisement image The default value is
AlternateText
DataMember—Enables you to bind to a particular data member in the data source
DataSource—Enables you to specify a data source programmatically for the list of
banner advertisements
DataSourceID—Enables you to bind to a data source declaratively
ImageUrlField—Enables you to specify the name of the field for the image URL for
the banner advertisement The default value for this field is ImageUrl
KeywordFilter—Enables you to filter advertisements by a single keyword
NavigateUrlField—Enables you to specify the name of the field for the
advertise-ment link The default value for this field is NavigateUrl
Target—Enables you to open a new window when a user clicks the banner
advertisement
The AdRotator control also supports the following event:
AdCreated—Raised after the AdRotator control selects an advertisement but before
the AdRotator control renders the advertisement
Trang 5CHAPTER 4 Using the Rich Controls
The AdRotator control includes a KeywordFilter property You can provide each banner
advertisement with a keyword and then filter the advertisements displayed by the
AdRotator control by using the value of the KeywordFilter property
This property can be used in multiple ways For example, if you display more than one
advertisement in the same page, you can filter the advertisements by page regions You
can use the KeywordFilter to show the big banner advertisement on the top of the page
and box ads on the side of the page
You can also use the KeywordFilter property to filter advertisements by website section
For example, you might want to show different advertisements on your website’s home
page than on your website’s search page
NOTE
If you cache a page that contains an AdRotator control, the AdRotator control is
excluded from the cache In other words, even if you cache a page, randomly selected
banner advertisements still display The AdRotator control takes advantage of a
fea-ture of the ASP.NET Framework called post-cache substitution You learn more about
this feature in Chapter 29, “Caching Application Pages and Data.”
Storing Advertisements in an XML File
You can store the list of advertisements that the AdRotator displays in an XML file by
setting the AdRotator control’s AdvertisementFile property For example, the page in
Listing 4.11 contains three AdRotator controls that retrieve banner advertisements from
an XML file named AdList.xml (see Figure 4.8)
LISTING 4.11 AdRotatorXML.aspx
<%@ Page Language=”C#” %>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml” >
<head id=”Head1” runat=”server”>
<style type=”text/css”>
html
{
background-color:silver;
}
.content
{
background-color:white;
padding:10px;
border:solid 1px black;
margin:auto;
width:400px;
Trang 6text-align:center;
}
.box
{
float:right;
padding:10px;
border-left:solid 1px black;
}
.clear
{
clear:both;
}
</style>
<title>AdRotator XML</title>
</head>
<body>
<form id=”form1” runat=”server”>
<div class=”content”>
<asp:AdRotator
id=”AdRotator1”
AdvertisementFile=”~/App_Data/AdList.xml”
KeywordFilter=”banner”
CssClass=”banner”
Runat=”server” />
<br />
<div class=”box”>
<asp:AdRotator
id=”AdRotator2”
AdvertisementFile=”~/App_Data/AdList.xml”
KeywordFilter=”box”
Runat=”server” />
<br /><br />
<asp:AdRotator
id=”AdRotator3”
AdvertisementFile=”~/App_Data/AdList.xml”
KeywordFilter=”box”
Runat=”server” />
</div>
<br />Here is the body text in the page
<br />Here is the body text in the page
<br />Here is the body text in the page
Trang 7CHAPTER 4 Using the Rich Controls
<br />Here is the body text in the page
<br class=”clear” />
</div>
</form>
</body>
</html>
FIGURE 4.8 Displaying advertisements from an XML file
The page in Listing 4.11 contains an AdRotator control that displays a banner
advertise-ment at the top of the page The page also contains two AdRotator controls that display
box advertisements on the right of the page
The first AdRotator has a KeyworldFilter property that has the value banner, and the
remaining two AdRotator controls have KeywordFilter properties with the value box The
first AdRotator displays only banner advertisements, and the remaining two AdRotator
controls display only box advertisements
All three AdRotator controls get their list of banner advertisements from a file named
AdList.xml This file is located in the App_Data folder for security reasons The files in the
App_Data folder cannot be opened in a web browser
Trang 8NOTE
There is nothing wrong with assigning different XML files to different AdRotator
con-trols For example, you could create distinct BannerAd.xml and BoxAd.xml files, and
then you would not have to worry about the KeywordFilter property
The file in Listing 4.12 contains the contents of the AdList.xml file
LISTING 4.12 AdList.xml
<?xml version=”1.0” encoding=”utf-8” ?>
<Advertisements>
<! Banner Advertisements >
<Ad>
<ImageUrl>~/Ads/BannerAd1.gif</ImageUrl>
<Width>300</Width>
<Height>50</Height>
<NavigateUrl>http://www.AspWorkshops.com</NavigateUrl>
<AlternateText>Banner Advertisement 1</AlternateText>
<Impressions>50</Impressions>
<Keyword>banner</Keyword>
</Ad>
<Ad>
<ImageUrl>~/Ads/BannerAd2.gif</ImageUrl>
<Width>300</Width>
<Height>50</Height>
<NavigateUrl>http://www.AspWorkshops.com</NavigateUrl>
<AlternateText>Banner Advertisement 2</AlternateText>
<Impressions>25</Impressions>
<Keyword>banner</Keyword>
</Ad>
<Ad>
<ImageUrl>~/Ads/BannerAd3.gif</ImageUrl>
<Width>300</Width>
<Height>50</Height>
<NavigateUrl>http://www.AspWorkshops.com</NavigateUrl>
<AlternateText>Banner Advertisement 3</AlternateText>
<Impressions>25</Impressions>
<Keyword>banner</Keyword>
</Ad>
<! Box Advertisements >
<Ad>
<ImageUrl>~/Ads/BoxAd1.gif</ImageUrl>
<Width>150</Width>
Trang 9CHAPTER 4 Using the Rich Controls
<Height>150</Height>
<NavigateUrl>http://www.AspWorkshops.com</NavigateUrl>
<AlternateText>Box Advertisement 1</AlternateText>
<Impressions>50</Impressions>
<Keyword>box</Keyword>
</Ad>
<Ad>
<ImageUrl>~/Ads/BoxAd2.gif</ImageUrl>
<Width>150</Width>
<Height>150</Height>
<NavigateUrl>http://www.AspWorkshops.com</NavigateUrl>
<AlternateText>Box Advertisement 2</AlternateText>
<Impressions>50</Impressions>
<Keyword>box</Keyword>
</Ad>
</Advertisements>
The Impressions attribute in the file in Listing 4.12 determines how often each banner
advertisement displays For example, the first banner advertisement displays 50% of the
time, and the remaining two banner advertisements display 25% of the time
Storing Advertisements in a Database Table
Rather than store the list of advertisements in an XML file, you can store the list in a
data-base table For example, the AdRotator control contained in Listing 4.13 is bound to a
SqlDataSource control The SqlDataSource control represents the contents of a database
table named AdList, which is located in a SQL Express database named AdListDB
LISTING 4.13 AdRotatorDatabase.aspx
<%@ Page Language=”C#” %>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml” >
<head id=”Head1” runat=”server”>
<title>AdRotator Database</title>
</head>
<body>
<form id=”form1” runat=”server”>
<div>
<asp:AdRotator
id=”AdRotator1”
DataSourceID=”srcAds”
Trang 10Runat=”server” />
<asp:SqlDataSource
id=”srcAds”
ConnectionString=”Server=.\SQLExpress;Integrated Security=True;
AttachDbFileName=|DataDirectory|AdListDB.mdf;User Instance=True”
SelectCommand=”SELECT ImageUrl, Width, Height, NavigateUrl, AlternateText,
Keyword, Impressions
FROM AdList”
Runat=”server” />
</div>
</form>
</body>
</html>
To use the page in Listing 4.13, you need to create the AdList database table This table
has the following schema:
NavigateUrl Varchar(250)
AlternateText NVarchar(100)
The columns in the AdList database table correspond to the attributes in the AdList.xml
file discussed in the previous section
Tracking Impressions and Transfers
Normally, when you display advertisements, you do it to make money Your advertisers
want statistics on how often their advertisements display (the number of impressions) and
how often their advertisements are clicked (the number of transfers)
To track the number of times that an advertisement displays, you need to handle the
AdRotator control’s AdCreated event To track the number of times that an advertisement
is clicked, you need to create a redirect handler