二、開發複合控制項
控制項要檢查使用者提交的內容是否包含“攻擊性”詞語,攻擊性詞語由一個XML檔案定義,XML檔案的結構如下:
<?xml version="1.0"? encoding="GB2312"> <words> <word>詞語一</word> <word>詞語二</word> </words> |
本文的複合控制項(Composite)包含三個ASP.NET伺服器控制項:一個Textbox控制項,一個Label控制項,還有一個Button控制項。當使用者點擊Button控制項,Composite檢查使用者提交的文本是否包含了XML檔案中指定的詞語(XML檔案的預設名字是bad_words.xml,通過一個自訂屬性定義),並拋出一個自訂事件。另外,Composite控制項還將它的Label子控制項的一個Text屬性顯露成頂級屬性。
複合控制項可以有選擇地將子控制項顯露成屬性,或者有選擇地將子控制項的屬性和事件作為頂級屬性和事件顯露出來。當複合控制項整合來自子控制項的屬性時,它通常只是簡單地委託子控制項執行操作,如下面的例子所示:
// 將操作委託給標籤對象,標籤對象是一個 // System.Web.UI.WebControls.Label的執行個體 Public Property Text() As String Get EnsureChildControls() Return label.Text End Get Set EnsureChildControls() label.Text = value End Set End Property |
我們需要一個文本輸入框讓使用者輸入內容,一個按鈕來提交表單,還要一個向使用者反饋資訊的文字標籤。下面我們來看看Web表單的代碼,複合控制項就是在這裡執行個體化的:
【composite.aspx】
<%@ page language="vb" debug="false" trace="false" %> <%@ Register TagPrefix="Custom" Namespace="CustomControls" Assembly = "CustomControls" %> <html> <script language="VB" runat=server> Private Sub CheckText(sender As Object, e As CheckEventArgs) If e.Match = false Then Composite.Text = "<h2>發布內容請遵守本站規則!不得發布攻擊性言辭!</h2>" Else Composite.Text = "你提交的內容已通過檢查!" End If End Sub </script><body> <h1>語言淨化控制項執行個體</h1><br> <form runat=server> <Custom:Composite id = "Composite" OnCheck = "CheckText" filename = "bad_words.xml" runat = server/></form></body> </html> |
上面的代碼首先註冊指定的複合控制項。我們將把控制項的代碼編譯成一個.dll檔案,放入應用的bin目錄,這是ASP.NET首先搜尋的位置。在Web表單構成的使用者介面中,我們執行個體化了自訂控制項,同時指定了:
⑴ 當控制項拋出OnCheck事件,執行一個本地的子過程CheckText。我們把複合控制項的標籤的文本通過一個公用屬性顯露出來,標籤的內容由OnCheck事件控制代碼設定的另一個公用屬性決定。
⑵ 定義攻擊性詞語的XML檔案的名字。
⑶ 另外,我們還定義了一個由複合控制項調用的CheckText子過程。
上一頁 1 2 3 下一頁