複合控制項和使用者控制項的比較
下列表格摘要複合控制項和使用者控制項之間的差異。如需撰寫使用者控制項的詳細資訊,請參閱 Web Form 使用者控制項。
複合控制項 | 使用者控制項 |
---|---|
對於程式撰寫的設計階段支援最少。 | 對於程式撰寫的設計階段完整支援。在視覺設計工具中撰寫使用者控制項,與在 ASP.NET 網頁 (Web Form 網頁) 中撰寫沒有兩樣。 |
利用程式設計方式,使用以 Common Language Runtime 為目標的物件導向程式語言 (例如 C# 或 Visual Basic .NET) 來撰寫。 | 宣告性使用 ASP.NET 網頁語法和指令碼區塊 (或程式碼後置,Code-Behind,網頁) 來撰寫。
注意 用來撰寫指令碼區塊的語言是以 Common Language Runtime 為目標的物件導向程式語言,例如 C#、Visual Basic .NET 和 JScript .NET;不過,ASP.NET 網頁架構對開發人員隱藏了許多程式設計的詳細資訊。 |
編譯並保存 (Persist) 為組件 (.dll)。 | 以 .ascx 副檔名 (以選擇性程式碼後置的檔案) 儲存為文字檔。 |
非常適合撰寫泛用的可轉散發控制項。 | 適合應用程式特定功能。 |
用於設計階段主應用程式 (Host) 時,設計階段支援很完整。複合控制項可以加入至視覺設計工具的工具箱,並拖放到網頁上。 | 用於設計工具中的支援最少。 |
注意 如果您想要擴充單一控制項 (例如 Label) 的功能,不要建立複合控制項或使用者控制項。在那種情況,您應該從 Label 衍生,以獲得繼承 (Inheritance) 和多型 (Polymorphism) 的好處,並加入或覆寫成員。如果您建立只含有一個控制項 Label 的使用者控制項 (或複合控制項),您的新控制項將不再具有 Label 的物件模型。您只有在想要組合多個現有控制項時,才應該建立使用者控制項 (或複合控制項)。
下列範例示範相當於複合伺服器控制項範例中開發的複合控制項的使用者控制項。使用者控制項引發名為 Check
的自訂事件。事件委派 CheckEventHandler
和事件資料類別 CheckEventArgs
(為 Check
事件所使用) 定義於複合伺服器控制項範例。
<%-- UserControl.ascx. --%>
<%-- The namespace CustomControls has to be imported because it contains
CheckEventArgs and CheckEventHandler. --%>
<%@Import Namespace = "CustomControls" %>
<script language="VB" runat=server>
Private ReadOnly Property Sum() As Integer
Get
EnsureChildControls()
Return Int32.Parse(box1.Text) + Int32.Parse(box2.Text)
End Get
End Property
Public Number As Integer = 100
Public Property Text() As String
Get
EnsureChildControls()
Return label.Text
End Get
Set
EnsureChildControls()
label.Text = value
End Set
End Property
Public Event Check As CheckEventHandler
Protected Overridable Sub OnCheck(e As CheckEventArgs)
RaiseEvent Check(Me, e)
End Sub
Private Sub Button_Clicked(sender As Object, e As EventArgs)
OnCheck(New CheckEventArgs(Sum - Number))
End Sub
</script>
<h3>Enter a number :
<asp:TextBox id = box1 text = "0" runat = server />
</h3> <br>
<h3>Enter another number :
<asp:TextBox id = box2 text = "0" runat = server />
</h3> <br>
<asp:Button id = button text = "Submit" OnClick = "Button_Clicked" runat = server />
<br> <br>
<asp:Label id = label text = "Click sumbit to see if you won."
height = 100 width = 400 runat = server />
在網頁上使用使用者控制項
下列網頁在 ASP.NET 網頁上使用使用者控制項 UserControl.ascx
。如需詳細資訊,請參閱在 Web Form 網頁中包含使用者控制項。
<%@Import Namespace = "CustomControls" %>
<%@ Register TagPrefix="MyUserControl" TagName = "MyControl" Src = "UserControl.ascx" %>
<script language="VB" runat=server>
Private Sub Sum_Checked(sender As Object, e As CheckEventArgs)
If e.Match = True Then
control.Text = "<h2> You won a million dollars!!!! </h2>"
Else
control.Text = "Sorry, try again. The numbers you entered don't add up to" & _
" the hidden number."
End If
End Sub
</script>
<html>
<body>
<h1> The mystery sum game </h1><br>
<form runat=server>
<MyUserControl:MyControl id = "control" OnCheck = "Sum_Checked" Number = "10" runat = server/>
</form>
</body>
</html>