ASP.NET用戶控件技術

發表于:2007-09-07來源:作者:點擊數: 標簽:
在前一篇文章當中,我們一同探討了如何使用ASP.NET中的代碼綁定技術來使得代碼重用變得簡單可行。我們發現,利用代碼綁定技術我們可以容易的將我們的代碼和內容分離開來,利用它可以建立可重用的代碼,只是這種技術本身也存在著一些局限性。在本文中,我們將
在前一篇文章當中,我們一同探討了如何使用ASP.NET中的代碼綁定技術來使得代碼重用變得簡單可行。我們發現,利用代碼綁定技術我們可以容易的將我們的代碼和內容分離開來,利用它可以建立可重用的代碼,只是這種技術本身也存在著一些局限性。在本文中,我們將會一同探討另外一種新的ASP.NET技術:用戶控件。
  
  什么是用戶控件(User Controls)?
  為了能更好的理解用戶控件的重要性,我們先來看看一段小小的“歷史”。在以前的ASP當中,可重用的技術實現選擇是相當受限制的。許多的開發者一般都是借助將公共的常用的子過程放到那些包含文件當中的做法來實現一定的所謂代碼重用的。比如,如我們想要在許多的ASP頁面當中現實一個下拉列表框,我會在一個包含文件當中建立一個函數,樣子如下所示:
  
  Function GetListBox(asSelectedItem)
  '為HTML的選擇控件建立字符串
  '返回這個字符串
  End Function
  
  當然,這樣的做法的確在一定程度上做到了重用,但是為了能做到更加通用性,你不得不要增加更多的參數。為了使得類似上面的你需要整理的代碼得以正常工作是困難的,因為要達到提供它的通用性(可重用性),你大概不得不去修改這些已經存在的代碼,以便使得他們也能在新的環境下正常工作。
  IIS5中的VBScript5.0增加了建立類的功能。這就使得我們可以通過一個較多面向對象的方式來實現可重用的代碼。
  
  Class ComboBox
  Property Let ControlName(vData)
  .
  End Property
  
  End Class
  
  這樣做會稍微好一些,但是開發者仍舊需要被迫去編寫那些函數,以便返回HTML代碼。而且,他也沒有能力操縱那些類的實例對象的事件。為了能做到操作事件,開發者不得不建立一些COM組件,而后者則增加了應用程序的額外的復雜度。
  
  有了ASP.NET,我們擁有了一個新的簡單的工具來編寫可重用的代碼—用戶控件。用戶控件(也叫pagelets)提供了這樣一種機制,他使得我們可以建立能夠非常容易的被ASP.NET頁面使用或者重新利用的代碼部件。一個用戶控件也是一個簡單的ASP.NET頁面,不過它可以被另外一個ASP.NET頁面包含進去。在你的ASP.NET應用程序當中使用用戶控件的一個主要的優點是用戶控件的支持一個完全面向對象的模式,使得你有能力去捕獲事件。而且,用戶控件支持你使用一種語言編寫ASP.NET頁面其中的一部分代碼,而使用另外的一種語言編寫ASP.NET頁面另外一部分代碼,因為每一個用戶控件可以使用和主頁面不同的語言來編寫。
  
  
  建立一個用戶控件
  在建立你自己的用戶控件之前,你也許想知道在你的web頁面中哪些可見的對象是能夠重用的好的候選者。能可能的是,你將會在你的站點上的不止一個頁面上需要使用融合的用戶控件。一旦你開始不斷的思考你的控件的結構,你就已經做好的開始的準備。在我們的例子當中,我們將要建立一個簡單的搜索的控件,用來搜索SQL Server2000中的數據庫Northwind。我們的搜索控件可以使得開發者快速的為一個web頁面增加搜索能力。
  
  建立用戶控件的第一步是建立一個.ascx文件。這是用戶控件需要的文件擴展名。在一個一個.ascx文件中不能包含head,form,或者body標簽,因為包含此.ascx文件的.aspx文件已經包含了這些標簽。一個.ascx文件只能包含方法,函數,以及和用戶控件相關的內同。
  
  在建立一個.ascx文件之后,我們想要為用戶控件增加一些可視的代碼。在一個用戶控件當中可以包含所有的web控件。在我們的例子當中,搜索控件需要擁有一個標簽,一個文本框以及一個按鈕。我們首先加入這些web控件,因為我們的整個代碼當中會涉及到這些對象。下面是具體的代碼:
  
    
    
  
  
  在用戶控件中有一件很酷的事情是,你可以定義你自己的屬性。在我們的例子當中,我們會定義如下屬性:
  
  。LabelText—描述顯示給用戶的搜索條件
  。ConnectiongString---用來聯接到數據庫的連接字符串
  。ResultSetView—包含了搜索結果的數據記錄集
  。TableName—要搜索的數據庫table名稱
  。Condition—需要搜索的table的列的名稱
  
  為了建立這些屬性,我們使用一些聯合起來的get和set方法來同屬性結合起來。在做這些工作之前,我們需要首先決定一個屬性是否需要允許讀,寫,還是兩者都需要。對于只需要讀的屬性,我們將會使用ReadOnly關鍵字來限定屬性的聲明,并且僅僅包含了get方法。我們的ResultSetView屬性是一個只讀的屬性,因此它的相關代碼看起來如下:
  '這是一個只讀的屬性
  
  Public ReadOnly Property ResultSetView as dataView
  Get
  '設置返回屬性地值
  ResultSetView = dsData.tables("BookTitles").defaultview
  End Get
  End Property
  
  對于只需要寫的屬性,我們將會使用WriteOnly關鍵字來限定屬性的聲明,并且僅僅包含了set方法。我們的TableName屬性是一個只寫屬性,因此它的相關代碼看起來如下:
  
  'This write only attribute identifies which table will be searched
  Public WriteOnly Property TableName as string
  Set
  '設置表的名稱
  strTableName = Value
  End Set
  End Property
  
  對于那些既能讀也能寫的屬性,在定義的時候就不需要加以限定了;并且同時包含了Get和Set方法。一旦這個屬性被建立,.aspx文件就可以讀取或者設置這些屬性,使得用戶控件可以適應一個或者多個用途了。
  
  在用戶控件當中,和定義不同的屬性相結合,你也需要定義任意的方法,這些方法可以被用戶控件初始化。這些屬性和方法定義了用戶控件的功能。在我們的例子當中使用的是search方法。這個方法讀取各個用戶定義在.aspx文件中的控件屬性,并且返回一個搜索的結果記錄集。所有的操縱數據庫的代碼都在這個方法中了:建立SQL語句,打開數據庫聯接,并且從數據庫中返回一個結果。
  
  '這個程序依照屬性的值來操縱一個數據庫
  Public Sub Search(sender As Object , e As System.EventArgs)
  Dim cnConnection As SQLConnection
  Dim cmdCommand As SQLDataSetCommand
  Dim strSearchString As String
  Dim strSQL As String
  '如果用戶在搜索框中輸入了條件
  If txtSearch.Text <> "" Then
  '過濾掉字符的前后空格
  strSearchString = trim$(txtSearch.Text)
  End If
  '建立我們的SQL語句
  strSQL = "SELECT * " amp; _
  "FROM " amp; strTableName amp; _
  " WHERE " amp; strConditionField amp; " LIKE '" amp; _
  trSearchString amp; "%'"
  '如果聯接屬性被設置了
  If strConnection <> "" Then
  '建立數據庫聯接
  cnConnection = New SQLConnection(strConnection)
  '打開數據庫聯接
  cnConnection.open()
  '為搜索建立一個新的command對象
  cmdCommand = New SQLDataSetCommand(strSQL, cnConnection)
  '建立一個新的DataSet對象
  dsData = New DataSet()
  '填充dataset對象
  cmdCommand.FillDataSet(dsData, "BookTitles")
  End If
  End Sub
  
  一旦你在你的用戶控件當中添加了屬性和方法,控件的開發也就大致完成了。
  現在我們對一個用戶控件是如何建立的有了一個認識,讓我們來看看用戶控件是如何工作的。下面是我們的用戶控件被包含在一個form當中的時候看起來的樣子:  
  
  我們的用戶控件將會放在一個國際食物網站的一個搜索頁面上。為了建立這個搜索頁面,我們先建立一個空的.aspx文件。我們先安排好所有的圖片和布局,之后加入我們的用戶控件。
  為了能夠在一個.aspx頁面當中使用這個新的用戶控件,你必須首先初始化@Register指令。當使用這個標簽的時候,你必須定義標簽前綴,標簽名字以及指定用戶控件所在的源文件。
  
  <%@ Register TagPrefix="jav" TagName="Search" src="SearchControl.ascx" %>
  
  TagPrefix定義了我們使用這個用戶控件的時候想要用的名稱空間。TagName定義了這個用戶控件的實際名稱。你可以任意的命名你的控件,這個名字將會用在頁面上面標示用戶控件。
  當你加入一個用戶控件到一個.aspx頁面的時候,相應的語法同加入一個web控件類似。你首先使用標簽前綴和標簽名稱來標示用戶控件:
  
  
[1] [2]下一頁

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97