ASP.NET設計控制項淨化網站語言(3)

來源:互聯網
上載者:User
  現在來看複合控制項本身。複合控制項有兩個類,用兩個獨立的VB源檔案實現,分別是composite.vb和checkevent.vb。

【composite.vb】

Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Xml
Imports System.Collections

Namespace 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

  上面代碼的主要任務是:

  ⑴ 首先匯入必要的名稱空間,聲明當前類所屬的名稱空間。

  ⑵ 接下來定義Composite的主體。Composite從最基本的Control類繼承,另外還要實現INamingContainer介面。INamingContainer介面允許Composite控制項將事件轉寄到它的Button子控制項。

  ⑶ 用CreateChildControls方法(而不是OnInit或建構函式)建立子控制項。

  ⑷ Composite控制項沒有顯露出Button子控制項的Click事件。相反,它處理了Click事件,並拋出自訂事件Check。

  ⑸ Composite控制項顯露了下列公用屬性:Text,即Label子控制項的Text屬性值;FileName,允許擷取和設定定義攻擊性詞語的XML檔案的名字

  ⑹ 主要的檢查功能由CheckString方法實現,它的輸入參數是一個文本字串。CheckString方法從XML檔案讀取禁用的詞語,放入一個數組列表(ArrayList),然後檢查指定的字串是否包含禁用的詞語。所有“攻擊性”的詞語將被適當數量的“*”替代。

  ⑺ OnPreRender清除文字框子控制項的文本。

  ⑻ 當使用者點擊按鈕,ButtonClicked開始執行。ButtonClicked調用onCheck子過程,傳入適當的參數(一個建立的CheckEventArgs對象,建立CheckEventArgs對象的參數是檢查前和檢查後的文本)。OnCheck隨後觸發一個事件,該事件將由.aspx頁面中的代碼處理。

【CheckEvent.vb】

' 包含定製事件數目據類CheckEventArgs的代碼.
' 另外還定義了Check事件的事件控制代碼
Imports System
Namespace CustomControls
Public Class CheckEventArgs
Inherits EventArgs
Private _match As Boolean = False

Public Sub New(string1 As String, string2 as String)
If string1=string2 Then
_match = True
End If
End Sub

Public ReadOnly Property Match() As Boolean
Get
Return _match
End Get
End Property
End Class

Public Delegate Sub CheckEventHandler(sender As Object, ce As CheckEventArgs)
End Namespace

  CheckEventArgs的建構函式是兩個字串,根據字串的值設定相應的匹配標記_match。另外,上面的代碼還定義了CheckEventHandler事件控制代碼。

  編寫好上面的代碼後,如果你沒有安裝IDE,用下面的命令執行編譯即可:

vbc /t:library /out:./bin/CustomControls.dll /r:System.dll /r:System.web.dll
/r:System.drawing.dll /r:System.Data.dll /r:System.xml.dll *.vb

上一頁  1 2 3

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.