• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    ASP.NET用戶控件技術

    來源:懂視網 責編:小采 時間:2020-11-27 22:45:28
    文檔

    ASP.NET用戶控件技術

    ASP.NET用戶控件技術:我們發(fā)現,利用代碼綁定技術我們可以容易的將我們的代碼和內容分離開來,利用它可以建立可重用的代碼,只是這種技術本身也存在著一些局限性。在本文中,我們將會一同探討另外一種新的ASP.NET技術:用戶控件。 什么是用戶控件(User Controls)? 為
    推薦度:
    導讀ASP.NET用戶控件技術:我們發(fā)現,利用代碼綁定技術我們可以容易的將我們的代碼和內容分離開來,利用它可以建立可重用的代碼,只是這種技術本身也存在著一些局限性。在本文中,我們將會一同探討另外一種新的ASP.NET技術:用戶控件。 什么是用戶控件(User Controls)? 為

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

    現在我們在頁面上面有了這個空間,我們可以設置標準的runat和id屬性,以及設置我們以前建立控件的時候建立的各個自己定義的屬性。有兩種方法來修改這些用戶控件的屬性(就像針對一個ASP.NET的web控件那樣)。一種方法是在你的web頁面當中引用這個用戶控件的時候明確的設置它的各個屬性的值。在我們的例子當中,我們設置LabelText屬性為“Product Name”,因為我們的搜索是針對產品名稱來講的。 
       
       
       
      另外一種方法是在一個.aspx文件的page_load事件中設置這些用戶控件的屬性。針對我們的例子,我們在page_load事件當中設置ConnectionString,TableName,ConditionField屬性。我們需要搜索的是數據庫Northwind中Product表的ProductName字段。 
       
      Sub page_load(objSource as Object, objArgs as eventArgs) 
      Dim htConfig As HashTable 
      '設置一個對Config.web文件中AppSettings節(jié)點的應用 
      htConfig = Context.GetConfig("appsettings") 
       
      '設置用戶控件的連接字符串 
      userControl.ConnectionString=(htConfig("MyConn")) 
       
      '設置我們要搜索的表的名稱 
      userControl.TableName="Product" 
       
      '設置我們要搜索的字段名稱 
      userControl.ConditionField="ProductName" 
      對于我們的web站點,我們將數據庫的連接字符串存放在Config.web文件當中的叫做appsettings中的區(qū)域中。(如果要使用下面的代碼,請將server修改成你實際的server名字) 
       
       
       
       
      下面是我們的.aspx文件第一次看起來的樣子: 
       
       
       
      現在我們需要加入代碼來調用我們的用戶控件中的search方法。我們編寫這個用戶控件的例子的目的是為了實現對數據庫的簡單搜索以及返回搜索的結果。為了做到這些,我們有兩個選擇,我們要么在我們的用戶控件當中將我們的結果放到我們的結果控件(在這里,一般是一個DataGrid控件),要么我們將一個ADO記錄集當作一個屬性返回給開發(fā)者,而不必關心開發(fā)者究竟使用什么方法來顯示他。我們的選擇是通過一個屬性返回一個記錄集結果,因為這樣做可以使得開發(fā)者可以自由的選擇使用什么控件以及采用什么樣的數據顯示方式。 
      然而這個選擇同時也帶給了我們一些問題。我們可以容易的將結果當作一個屬性返回并且使用DataSource屬性綁定到一個DataGrid控件或者其他的控件。但是,我們如何才能知道用戶是否是點擊了一個搜索按鈕呢?為了解決這個問題,我們需要在page_load事件中使用Page.IsPostBack這個屬性。如果一個頁面是由于post而重載的話,屬性Page.Ispostback的值等于true。通過檢測page.ispostback是否等于true,我們可以決定是否調用我們的用戶控件中的Search方法,然后將結果綁定到我們的datagrid。 
       
      '檢測Page.IsPostBack屬性的值 
      If page.IsPostback = true then 
      '執(zhí)行搜索的動作 
      userControl.Search(objSource, objArgs) 
      '將結果綁定到DataGrid控件上面 
      grdGrid.datasource = userControl.ResultSetView 
      '正式綁定數據 
      grdGrid.databind() 
      End If 
      End Sub 
      在某個人輸入了一個搜索條件之后并提交我們的.aspx文件之后的顯示頁面: 
       
       
       
      現在我們可以同樣的建立另外一個頁面以便使用在我們的站點。我們將要建立的這第二個頁面同樣執(zhí)行一個搜索動作,但是這次是要在Northwind數據庫的表Company上的CompanyName字段上面進行搜索匹配。為了建立這個頁面,我們建立一個新的空白.aspx文件。既然這個頁面和我們的產品頁面類似,我們使用相同的布局。我們將要再一次使用搜索用戶控件。 
       
       
       
      我們在這個頁面會將屬性設置不同的值。聯(lián)接字符串還是保留使用前面同樣的值。我們需要設置屬性LabelText的值等于Company Name,設置屬性Table的值等于Company,設置屬性ConditionField的值等于CompanyName。通過對布局和用戶控件的略微改動,我們就算大致完成了這個頁面。對這個頁面來講,我們只需要很少的代碼,這要好好謝謝用戶控件帶來的代碼重用了。下面就是我們新的頁面: 
       
       
       
      正如你所看到的,用戶控件可以提供一個簡便的方法來實現代碼的可重用性,而省去了很多不必要的麻煩。將相關的控件和代碼從一個ASPX文件移到一個ASCX文件當中是一個恰當的做法,并且只需要較小的修改就可以使得代碼正常的工作了。 
       
      局限性? 
      你也許會問自己:我使用用戶控件不能夠做到什么?使用這個技術只存在很少的一些限制。 
      其中的一個限制是:用戶控件不支持模版。因此,你不能建立一個用戶控件來達到ASP.NET中提供的Data Repeater控件的功能。 
      另外的一個限制是:由于用戶控件必須包含一些靜態(tài)的UI(用戶界面)屬性,所以你不能夠按照你的想法嚴格的調整他們。比如,你可能想要建立一個包含多個控件的用戶控件,并且允許開發(fā)者能夠指定這些控件在頁面上的顯示順序。上面的想法對于一個用戶控件來說是困難的,因為UI塊是被靜態(tài)的設置的。 
       
      結論 
      用戶控件提供了一個極好的方法使得你能夠非常容易的在你的ASP.NET頁面中實現代碼的重用。將一些在ASP.NET中的代碼拖放到ASCX文件中使得他們能夠被重新利用是個正確的選擇和做法。 
      在我們的文章中,我們一同探討了通過定制的控件實現代碼在ASP.NET中的重用。可定制的ASP.NET控件可以對可重用代碼提供附加的彈性,正如上面我們已經學到那樣。

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    ASP.NET用戶控件技術

    ASP.NET用戶控件技術:我們發(fā)現,利用代碼綁定技術我們可以容易的將我們的代碼和內容分離開來,利用它可以建立可重用的代碼,只是這種技術本身也存在著一些局限性。在本文中,我們將會一同探討另外一種新的ASP.NET技術:用戶控件。 什么是用戶控件(User Controls)? 為
    推薦度:
    標簽: 技術 控件 ASP.NET
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 无码人妻精品一区二区三区66| 亚洲国产精品18久久久久久| 久久精品国产清自在天天线| 国产精品91av| 日本Aⅴ大伊香蕉精品视频| 色综合久久精品中文字幕首页 | 久久久久99精品成人片三人毛片| 成人午夜视频精品一区| 最新国产乱人伦偷精品免费网站| 国产精品一区二区三区99| 久久夜色精品国产亚洲| 国产精品无套内射迪丽热巴| 亚洲国产第一站精品蜜芽| 男人的天堂精品国产一区| 丁香色婷婷国产精品视频| 国内精品久久国产大陆| 国产乱码精品一品二品| 亚洲精品乱码久久久久久按摩| 国产在线精品福利大全| 99久久精品这里只有精品 | 欧美日韩综合精品| 国产天天综合永久精品日| 国产精品第1页| 91久久精品国产成人久久| 2022年国产精品久久久久| 国产精品自在线拍国产| 久久久久久国产精品无码超碰| 中文国产成人精品久久不卡| 亚州日韩精品专区久久久| 无码AⅤ精品一区二区三区| 久久精品国产精品亚洲| 国产偷国产偷高清精品| 精品视频一区二区三区| 精品国产91久久久久久久a| 精品久久久久久无码中文野结衣| 国产精品久久久久乳精品爆| www.精品| 精品人妻少妇一区二区三区不卡| 国产亚洲精品影视在线产品| 久久激情亚洲精品无码?V| 久久精品成人欧美大片|