久久―日本道色综合久久,亚洲欧美精品在线,狼狼色丁香久久婷婷综合五月,香蕉人人超,日本网站黄,国产在线观看不卡免费高清,无遮挡的毛片免费

2025年度未來(lái)銀行科技服務(wù)商TOP100
全世界各行各業(yè)聯(lián)合起來(lái),internet一定要實(shí)現(xiàn)!

ASP.NET用戶(hù)控件技術(shù)

2004-02-16 eNet&Ciweek

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

相關(guān)頻道: eNews

您對(duì)本文或本站有任何意見(jiàn),請(qǐng)?jiān)谙路教峤唬x謝!

投稿信箱:tougao@enet16.com