Imports System Imports System.Web Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.Xml Imports System.CollectionsNamespace CustomControls Public Class Composite Inherits Control Implements INamingContainer Private _filename As String = "bad_words.xml" Private label As Label Private box1 As TextBox Public Property filename() As String Get Return _filename End Get Set _filename = value End Set End Property ' 以使用者提交的常值內容為輸入參數。如果使用者提交的內容包含攻擊性言辭, ' 則返回修改後的版本, ' 否則,直接返回原始的文本。 Public Function CheckString(InputString as String) as string Dim alWordList As new ArrayList dim xmlDocPath as string = mappathsecure("bad_words.xml") dim xmlReader as XmlTextreader = new xmlTextReader(xmlDocPath) dim element as string dim output as string dim asterisks as string = "*************************" ' 將定義攻擊性言辭的xml檔案內容讀入到一個ArrayList while (xmlReader.Read()) if xmlReader.NodeType=xmlNodeType.Text then alWordList.Add(xmlReader.Value) end if end while xmlReader.Close() ' 檢查使用者提交的常值內容,將攻擊性言辭替換為適當數量的星號 For Each element in alWordList InputString=InputString.Replace(element, asterisks.substring(1, (element.length))) Next Return InputString End Function Public Property Text() As String Get ' 該方法首先檢查ChildControlsCreated屬性的當前值。如果該值是false, ' 則調用CreateChildControls方法 EnsureChildControls() Return label.Text End Get Set EnsureChildControls() label.Text = value End Set End Property Public Event Check As CheckEventHandler Protected Overridable Sub OnCheck(ce As CheckEventArgs) RaiseEvent Check(Me, ce) End Sub '建立Composite控制項的子控制項 Protected Overrides Sub CreateChildControls() Controls.Add(New LiteralControl("<h3>請在下面輸入文字內容: ")) '文本輸入框 Dim box1 As New Textbox() box1.Text = "" Controls.Add(box1) Controls.Add(New LiteralControl("</h3>")) '按鈕 Dim button1 As New Button() button1.Text = "提交" Controls.Add(New LiteralControl("<br>")) Controls.Add(button1) ' 將一個事件控制代碼加入新建立的按鈕對象 AddHandler button1.Click, AddressOf Me.ButtonClicked Controls.Add(New LiteralControl("<br><br>")) label = New Label() label.Height = Unit.Pixel(50) label.Width = Unit.Pixel(500) label.Text = "" Controls.Add(label) End Sub Protected Overrides Sub OnPreRender(e As EventArgs) CType(Controls(1), TextBox).Text = "" End Sub Private Sub ButtonClicked(sender As [Object], e As EventArgs) OnCheck(New CheckEventArgs(CType(Controls(1), TextBox).Text, CheckString(CType(Controls(1), TextBox).Text))) End Sub End Class End Namespace |