本文介紹如何在ASPNET中創建用戶控件控件屬性的動態修改以及控件的事件出發機制
簡介
ASPNET的服務端控件使得Web開發工作變得更為簡單功能更為強大我們介紹過如何在ASPNET頁面中使用服務端控件但是如果服務端沒有所要求的控件時該怎麼辦呢?
當然ASPNET不會給你變出一個莫須有的控件事實上可以動手作自己的控件來取代NET提供的控件這種控件就是用戶控件也正是本文討論的話題
編寫第一個用戶控件
有人認為知道如何使用服務端控件可不一定說明編寫用戶控件是件容易的事
事實上編寫一個基本用戶控件(有時也稱之為pagelets)並讓ASPNET頁面象使用服務端控件那樣使用這些控件的確是件簡單的事這裡有一個簡單示例
basicascx
<p>
This is a user control…… really!
</p>
這就是一個用戶控件!看到這裡我想你會說我該不是喝醉了頭腦不清楚吧但這段代碼的確就是易於被使用的一個用戶控件盡管這個控件沒有作什麼事卻是關於什麼是用戶控件的一個很好說明事情並不象想像得那麼復雜注意後綴ascx它告訴網頁這是一個用戶控件它沒有什麼特別含義只是不讓IIS去直接執行這段代碼
現在我們來創建一個用戶控件看下面的例子
basicaspx
<%@ Page Language=VB %>
<%@ Register TagPrefix=aspsamps TagName=SomeText
Src=basicascx %>
<html>
<head>
<title>ASPNET User Control Sample Basic</title>
</head>
<body bgcolor=#FFFFFF>
<aspsampsSomeText runat=server />
</body>
</html>
這段代碼輸出標准HTML頁面顯示用戶控件裡的文字而不是標記
那麼它是怎麼實現的呢?關鍵就在注冊(Register)說明要注冊控件先要定義三個屬性
TagPrefix
定義控件位置的命名空間有了命名空間制約就可以在同一個網頁裡使用不同功能的同名控件
TagName
指向所使用控件的名字在同一個命名空間裡的控件名是唯一的控件名一般都表明控件的功能
Src
指向控件的資源文件資源文件使用虛路徑(controlascx 或 /path/controlascx)不能使用物理路徑(Cpathcontrolascx)
控件注冊之後就可以象其它服務端控件一樣被使用通過定義目標前綴(TagPrefix)和目標名(TagName)就可以象使用服務端內建控件一樣地進行使用同時也確定了使用服務端運行(runat=server)方式下面是網頁調用用戶控件的基本方式
<TagPrefixTagName runat=server />
給用戶控件增加屬性並賦值
下面我給控件加上兩個屬性一個是color另一個是text
propertiesascx
<script language=VB runat=server>
Public Color As String = black
Public Text As String = This is a user control…… really!
</script>
<p>
<font color=<%= Color %>>
<%= Text %>
</font>
</p>
這樣就可以使用和改變控件的色彩和文字了可以在初始化時賦值還可以動態地修改這二個屬性
在同一個網頁裡可以重復調用這個控件並使用不同的屬性值
propertiesaspx
<%@ Page Language=VB %>
<%@ Register TagPrefix=aspsamps TagName=SomeText
Src=propertiesascx %>
<script language=VB runat=server>
Sub Page_Load(Sender As Object E As EventArgs)
UserCtrlColor = green
UserCtrlText = This controls properties were _
& set programmatically!
End Sub
</script>
<html>
<head>
<title>ASPNET User Control Sample Properties</title>
</head>
<body bgcolor=#FFFFFF>
<aspsampsSomeText runat=server />
<aspsampsSomeText Color=red runat=server />
<aspsampsSomeText Text=This is quite cool! runat=server />
<aspsampsSomeText Color=blue Text=Aint It? runat=server />
<aspsampsSomeText id=UserCtrl runat=server />
</body>
</html>
還想再好些用戶控件是否能夠有事件句柄呢?
用戶控件幾乎可以作任何事下面的代碼示范控件如何觸發Page_Load事件有了事件句柄就不用多寫其它的維護代碼來控制控件的運行控件可以自己觸發事件
在下面的代碼中封裝了一個ASP的textbox控件我將我的控件名屬性與textbox的內容掛鉤
eventsascx
<script language=VB runat=server>
Sub Page_Load(Src As Object E As EventArgs)
Dim strInitialText As String = Please Enter a Name!
If PageIsPostBack Then
If txtNameText = strInitialText
txtNameText =
End If
Else
txtNameText = strInitialText
End If
End Sub
Public Property Name As String
Get
Return txtNameText
End Get
Set
txtNameText = Value
End Set
End Property
</script>
Name <asptextbox id=txtName runat=server />
<aspRequiredFieldValidator ControlToValidate=txtName
id=valtxtName Display=Dynamic runat=server>
Please Enter a Name!
</aspRequiredFieldValidator>
eventsaspx
<%@ Page Language=VB ClientTarget=downlevel %>
<%@ Register TagPrefix=aspsamps TagName=SomeText
Src=propertiesascx %>
<%@ Register TagPrefix=aspsamps TagName=TextBox
Src=eventsascx %>
<script language=VB runat=server>
Sub Page_Load(Sender As Object E As EventArgs)
txtLabelText =
The textbox control handles its own stuff
in its own Page_Load event handler
End Sub
Sub btnSubmit_Click(Sender As Object E As EventArgs)
Sets the label to the textboxs text
txtLabelText = txtNameName
I dont need to worry about validation since
my user control does it for me
End Sub
</script>
<html>
<head>
<title>ASPNET User Control Sample Validation & Events</title>
</head>
<body bgcolor=#FFFFFF>
<form runat=server>
<aspsampsTextBox id=txtName runat=server />
<aspbutton id=btnSubmit onClick=btnSubmit_Click
text=Submit runat=server />
</form>
<aspsampsSomeText id=txtLabel runat=server />
</body>
</html>
這就是關於用戶控件和應用的說明無論你認為它是否簡單它肯定比使用傳統ASP要容易
From:http://tw.wingwit.com/Article/program/ASP/201311/21676.html