【 tulaoshi.com - ASP 】
                             
                               使用定制的服务器控件 
在asp+中提供了45个已经做好了的服务器控件,我们可以将他们象黑盒子一样的使用。除此以外,开发者还可以使用任何第三方开发的服务器控件 
在下面的例子中,我们要用到一个通过<acme:calendar runat=server标签声明的组件,请注意,在文件的第一行必须使用<% Register % 来声明 "Acme Xml "标签的的前缀"Acme".在asp+ 文件中,将会使用这个命名的服务器控件的类的实例。 
<%@ Register TagPrefix="Acme" Namespace="Acme" % 
<html 
<head 
<link rel="stylesheet"href="intro.css" 
</head 
<script language="VB" runat=server 
Sub SubmitBtn_Click(Sender As Object, E As EventArgs) 
Message.Text = "Hi " & Name.Text & ", you selected: " & Category.SelectedItem.Text & " on: " & MyCal.Date 
End Sub 
</script 
<body 
<center 
<form action="intro7.aspx" method="post" runat="server" 
<asp:adrotator AdvertisementFile="ads.xml" BorderColor="black" BorderWidth=1 runat="server"/ 
<h3 Name: <asp:textbox id="Name" runat="server"/ 
Category: <asp:dropdownlist id="Category" runat=server 
<asp:listitem psychology</asp:listitem 
<asp:listitem business</asp:listitem 
<asp:listitem popular_comp</asp:listitem 
</asp:dropdownlist 
<asp:button type=submit text="Lookup" OnClick="SubmitBtn_Click" runat="server"/ 
<p 
<Acme:Calendar id="MyCal" runat=server/ 
<p 
<asp:label id="Message" runat="server"/ 
</form 
</center 
</body 
</html 
声明Acme 的 文件 
using System; 
using System.Web; 
using System.Web.UI; 
using System.Collections; 
namespace Acme 
{ 
public class Calendar : Control, IPostBackEventHandler, IPostBackDataHandler 
{ 
private String[] monthNames = new String[12]; 
private DateTime currentDate = DateTime.Now; 
private String backColor = "#dcdcdc"; 
private String foreColor = "#eeeeee"; 
protected override void Init() 
{ 
// Todo: We should remove the need to call this 
Page.RegisterRequiresPostBack(this); 
Page.RegisterPostBackScript(); 
currentDate = DateTime.Now; 
// Todo: Hack needed because COOL doesn't support array initializers yet 
monthNames[0] = "January"; 
monthNames[1] = "February"; 
monthNames[2] = "March"; 
monthNames[3] = "April"; 
monthNames[4] = "May"; 
monthNames[5] = "June"; 
monthNames[6] = "July"; 
monthNames[7] = "August"; 
monthNames[8] = "September"; 
monthNames[9] = "October"; 
monthNames[10] = "November"; 
monthNames[11] = "December"; 
} 
protected override void LoadState(Object viewState) 
{ 
// If we've done a post-back, the old date will be available to us 
if (null != viewState) 
{ 
currentDate = DateTime.Parse((String) viewState); 
} 
} 
public void RaisePostBackEvent(String eventArgument) 
{ 
//Page.Response.Write("RaisePostBackEvent Called!!!"); 
if (eventArgument == null) 
{ 
return; 
} 
// Keep track of old date (for event firing purposes) 
DateTime oldDate = currentDate; 
// Todo: We should have post-back take two arguments: eventname and eventarguments 
if (String.Compare("NavNextMonth", eventArgument, true) == 0) 
{ 
currentDate = currentDate.AddMonths(1); 
} 
else if (String.Compare("NavPrevMonth", eventArgument, true) == 0) 
{ 
currentDate = currentDate.AddMonths(-1); <