亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > ASP > 正文

ASP中實現分頁顯示的七種方法

2024-05-04 11:10:05
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了ASP中實現分頁顯示的七種方法,這七種方法可以分為四大類,需要的朋友可以參考下

在微軟的ASP編程體系中,ADO對象的建立,使得從網頁訪問數據庫成為一件易事,特別是ADO的Recordset對象使得控制數據的輸出顯示更為方便、自由。而在Visual InterDev6.0(以下簡稱VI6.0)中,由于Script Object Model(以下簡稱SOM)、Design-Time Control(以下簡稱DTC)以及Data Environment Object Model(以下簡稱DEOM)等對象模型的引入,使網頁對數據庫的訪問設計顯得更為方便。

因為主題方面的原因,關于數據庫的連接,下文只給出代碼和簡要注釋,而把重點放在如何利用Recordset對象(或控件)實現數據記錄的分頁顯示方面。根據我的理解,分頁顯示的關鍵就在于對ADO的Recordset對象或DTC(設計時控件)的Recordset控件的屬性和方法的熟練把握上。

這七種分頁顯示的武器概括起來說分四類: 第一、二種我暫取名叫“純ASP法”,

這也是國內的ASP網站上用得最多的方法,它們的區別僅在實現技巧的不同。這兩種方法的實現最易理解,用到的對象概念也最少,對開發環境的要求也最低(只要記事本就行)??梢哉f,這兩種方法的實質還是CGI的編程思想,只是在程序中引入了ADO對象而已。

第四、五種暫取名叫“SOM的DHTML法”。

這兩種方法要求在VI6.0的環境下,利用微軟提出的腳本對象模型(Script Object Model)和DHTML中Table對象的與數據庫綁定的新特性(許多書和文章只介紹了DHTML的CSS特性在樣式設計中的運用而忽略介紹其數據綁定特性),實現在客戶端控制翻頁。但它要求用戶的瀏覽器必須是支持DHTML,如:Microsoft Internet Explorer 4.0及以上的版本。

第六種暫取名叫“SOM服務器端法”。

要求在VI6.0的環境下開發,它利用微軟提出的腳本對象模型(Script Object Model)中的幾個DTC控件:Recordset、PageObject、Grid等在服務器端(客戶端)實現翻頁控制。這是一種激動人心的、全新的編程方法,它把網頁看成對象(這種對象模型和傳統的DOM----document object model是有區別的:DOM只能控制客戶端,而SOM可控制服務器端和客戶端),它真正實現了網頁的面向對象編程。但遺憾的是,也許是我個人能力有限,這種技術我個人認為還不是很成熟,比如,與瀏覽器的結合還不是很好,這將在后文詳細說明。

第七種暫取名叫“DEOM法”。

它也是利用了VI6.0中建立的數據環境對象模型(Data Environment Object Model)建立Recordset對象。這也是在網頁編程上比較少見的新方法,與SOM模型相比,自有它的優點,這將在后文詳述。

在后面所舉的所有例子源代碼,都可以直接拷貝使用,你甚至可以不懂其原理,只要把其中的粗斜體字部分換成相應自己的數據庫名或字段名就可以了。

在開始詳細介紹各種分頁方法前,讓我們先創建一個數據庫:用Office97中的access自創一個Employee.mdb,其中建一個表emp,只設三個字段:emp ID,last name和first name。為什么這么簡單,是因為我們關心的是怎樣處理recordset的結果。

第一種:參數直接代入法

這種方法是用手工建立Recordset對象,利用其pagesize(每頁指定顯示記錄數),pagecount(總頁碼數)和absolutepage(當前頁碼數)屬性來控制分頁的輸出。分頁采用直接帶頁碼參數的方法來控制翻頁。網頁的名字為emp1.asp。源代碼如下:

 

 
  1. <%//建立與employee.mdb數據庫的連接。 
  2. Set conn = Server.CreateObject("ADODB.Connection"
  3. conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=employee.mdb" 
  4. //建立emp表的Recordset對象實例rs。 
  5. Set rs = Server.CreateObject("ADODB.Recordset"
  6. rs.Open "emp", conn, 3 
  7. PageSize = 10 //pagesize屬性指定了每頁要顯示的記錄條數 
  8. Page = CLng(Request("Page")) 'string型轉化為long型 
  9. If Page < 1 Then Page = 1 
  10. If Page > rs.PageCount Then Page = rs.PageCount 
  11. If Page <> 1 Then 
  12.  Response.Write "<A HREF=emp1.asp?Page=1>第一頁</A>" 
  13.  Response.Write "<A HREF=emp1.asp?Page=" & (Page-1) & ">上一頁</A>" 
  14. End If 
  15. If Page <> rs.PageCount Then 
  16.  Response.Write "<A HREF=emp1.asp?Page=" & (Page+1) & ">下一頁</A>" 
  17.  Response.Write "<A HREF=emp1.asp?Page="&rs.PageCount & ">最后一頁</A>" 
  18. End If 
  19. Response.write"頁碼:" & Page & "/" & rs.PageCount & "</font>" 
  20. //每一頁的顯示 
  21. //顯示表頭 
  22. Response.Write "<CENTER><TABLE BORDER=1>" 
  23. Response.WRITE "<TR><TD>" & rs.Fields("emp ID").Name & "</TD>" 
  24. Response.WRITE "<TD>" & rs.Fields("last name").Name & "</TD>" 
  25. Response.WRITE "<TD>" & rs.Fields("first name").Name & "</TD></TR>" 
  26. //循環顯示每條記錄 
  27. rs.AbsolutePage = Page //把頁碼賦給absolutepage屬性從而知當前頁的首條記錄號 
  28. For iPage = 1 To rs.PageSize // 
  29. Response.WRITE "<TR><TD>" & rs.Fields("emp ID").Value & "</TD>" 
  30. Response.WRITE "<TD>" & rs.Fields("first name").Value & "</TD>" 
  31. Response.WRITE "<TD>" & rs.Fields("last name").Value & "</TD></TR>" 
  32. rs.MoveNext 
  33. If rs.EOF Then Exit For 
  34. Next 
  35. Response.Write "</TABLE></CENTER>"%> 

第二種:表單傳送參數法

這種方法在創建Recordset對象時與第一種相同,只是在翻頁控制時,采用和case語句配合來實現翻頁。網頁的名字為:emp2.asp。此方法在編程邏輯上有個缺點:就是在按過“上頁”或“下頁”鈕后,再在瀏覽器上按刷新按鈕時,會自動翻頁。源代碼如下:

 

 
  1. if Pagenum = "" Then Pagenum = 1 //從第一頁開始顯示 
  2. //建立數據庫連接和Recordset對象實例rs。 
  3. 與第一種方法相同,此處略過。 
  4. RS.Pagesize = 10 ' 設置一頁中顯示的記錄條數為10條 
  5. // 確定翻頁的動作 
  6. Select Case Request("NAV"
  7. Case "" 
  8.  session("Pagenum") = 1 
  9. case "First" ' First Record 
  10.  session("Pagenum") = 1 
  11. case "Prev" ' Previous Record 
  12.  if session("Pagenum") > 1 then 
  13.   session("Pagenum") = session("Pagenum") - 1 
  14.  End If 
  15. case "Next" ' Next Record 
  16.  if session("Pagenum")< RS.PageCount then 
  17.   session("Pagenum") = session("Pagenum") + 1 
  18.  End if 
  19. case "Last" ' Last Record 
  20.  session("Pagenum") = RS.PageCount 
  21. End Select 
  22. RS.Absolutepage = Clng(session("Pagenum")) //確定當前頁的第一條記錄號 
  23. // 顯示當前頁 
  24. 同第一種方法,此處略過。 
  25. // Nav 翻頁按鈕設置 
  26. <form method="GET" action="emp2.asp"> 
  27. <input type="submit" name="NAV" Value="首頁"> 
  28. <input type="submit" value="上頁" name="NAV"> 
  29. <input type="submit" value="下頁" name="NAV"> 
  30. <input type="submit" value="末頁" name="NAV"></form> 

第三種:用Grid控件設計分頁

所有的方法中,這種方法最容易。你只需拖DTC中的Recordset控件和Grid控件到asp網頁中就行了。而且,你還能選擇是在服務器平臺還是在客戶端平臺控制翻頁。缺點就是你必須用它給定的格式顯示,而不能自己自由控制表格的顯示格式。

方法如下:

在VI6.0中建一個工程emp.vip。再在工程中添加一個asp網頁:emp3.asp。

第一步:選VI6.0菜單條上的“add data connect…”,按開發工具的導航提示,你就可以很容易地建立與Employee.mdb數據庫的連接。從DTC工具欄中拖一個Recordset控件到網頁中,并設置其屬性。具體如圖:

當你拖控件到網頁中時,VI6.0會自動提示你“是否使用Scripting object model”,按yes。

第三步:從DTC工具欄中拖一個Grid控件到網頁中,然后單擊鼠標右鍵,設置其屬性,如:選在第二步中創建的Recordset控件名,選擇emp表中的字段,每頁顯示多少條記錄以及顯示格式等。非常簡單方便,只要照著導航提示做就行了。

第四種:DHTML法一。

數據記錄顯示在一個HTML表中。它利用DHTML中表的數據綁定特性來控制記錄的分頁顯示。缺點就是你的翻頁方法將被限制為一種特定的方式:只能“上頁”和“下頁”而不能“首頁”和“末頁”。由于是在客戶端控制翻頁,所以,這種和第五種方法是速度最快的,但遺憾的是它只能在支持DHTML的瀏覽器上使用。

在DHTML中,

的DATASRC屬性可使表格綁定到一個數據源,另一個屬性DATAPAGESIZE可指定一頁一次顯示的記錄數。

我們來看下面的例子:

第一步:拖Recordset控件到新建的網頁emp4.htm中,設置其屬性,方法同第三種,此處略。

第二步:輸入下面的代碼:

 

 
  1. <TABLE ID="Table1" DATASRC="#Recordset1_RDS" DATAPAGESIZE=5> //假定前面設定Recordset控件名為Recordset1。每頁顯示5條記錄。 
  2. <THEAD> 
  3. <TH ALIGN="left" WIDTH=150>Emp ID</TH> //輸出表頭 
  4. <TH ALIGN="left" WIDTH=200>Last Name</TH> 
  5. <TH ALIGN="left" WIDTH=200>First Name</TH> 
  6. </THEAD> 
  7. <TR> 
  8. <TD><DIV DATAFLD="Emp ID"></DIV></TD> //輸出表內容 
  9. <TD><DIV DATAFLD="Last Name"></DIV></TD> 
  10. <TD><DIV DATAFLD="First Name"></DIV></TD> 
  11. </TR> 
  12. </TABLE> 

第三步:然后,增加一對DTCs Button按鈕控件來做翻頁導航,一個命名為“btnPrevious”(上一頁),一個命名為“btnNext”(下一頁)。它們相應的腳本如下:

 

 
  1. <SCRIPT LANGUAGE=VBScript> 
  2. Function btnPrevious_onclick() 
  3. Table1.previousPage() 
  4. End Function 
  5. Function btnNext_onclick() 
  6. Table1.nextPage() 
  7. End Function 
  8. </SCRIPT> 

第五種:DHTML法二

這種方法是對第四種方法的完善。采用手工編寫腳本的方法,使我們能做“首頁”,“末頁”翻頁導航按鈕,并能確定每條記錄的位置(記錄號)。由于篇幅的關系,我在下面只介紹一個具體例子,并給出簡要說明。其它關于DHTML和Recordset控件的一些屬性和方法請讀者自行參照相關書籍。這里需要提請注意的是,Recordset控件與第一、二種方法中介紹的ADO的Recordset對象有些不同:Recordset控件沒有直接給出pagesize和pagecount等屬性,需要用下面介紹的方法來計算。

第一步:拖Recordset控件到新建的網頁emp5.htm中,名字為Recordset1,設置其屬性,方法同第三種,此處略。

第二步:定義三個全局變量和編寫Recordset1的ondatasetcomplete(數據設置完成時)腳本。

 

 
  1. Dim gCurrentPageNumber //當前頁號 
  2. Dim gMaxPageNumber //最大頁數 
  3. Dim gRecordsPerPage //每頁顯示記錄數 
  4. gRecordsPerPage = 5 // 設置每頁顯示記錄數為5條記錄。 
  5. Function Recordset1_ondatasetcomplete() 
  6. totalRecordCount = Recordset1.getCount() //總的記錄條數 
  7. gMaxPageNumber = Int(totalRecordCount / gRecordsPerPage) //獲得最大頁數 
  8. If (totalRecordCount Mod gRecordsPerPage) > 0 then 
  9. gMaxPageNumber = gMaxPageNumber + 1 
  10. End If 
  11. End Function 

第三步:創建翻頁導航按鈕。

 

  1. Function btnFirst_onclick() ' 翻到首頁 
  2.  gCurrentPageNumber = 1 
  3.  DisplayData() 
  4. End Function 
  5. Function btnPrevious_onclick() ' 翻到上一頁 
  6.  if gCurrentPageNumber > 1 Then 
  7.   gCurrentPageNumber = gCurrentPageNumber - 1 
  8.   DisplayData() 
  9.  End If 
  10. End Function 
  11. Function btnNext_onclick() ' 翻到下一頁 
  12.  if gCurrentPageNumber < gMaxPageNumber Then 
  13.   gCurrentPageNumber = gCurrentPageNumber + 1 
  14.   DisplayData() 
  15.  End If 
  16. End Function 
  17. Function btnLast_onclick() '翻到末頁 
  18.  gCurrentPageNumber = gMaxPageNumber 
  19.  DisplayData() 
  20. End Function 

第四步:編寫顯示每一頁的函數。其中使用了許多DHTML的屬性和方法,請讀者自行參考相關書籍。

 

 
  1. Sub DisplayData() 
  2. startRecord = ((gCurrentPageNumber - 1) * gRecordsPerPage) + 1 //計算每一頁開始顯示的記錄號數(位置,第幾條) 
  3. rowCtr = 1 
  4. lblPageNumber.innerHTML = gCurrentPageNumber & "/" & gMaxPageNumber 
  5. For recordPtr = startRecord To (startRecord + gRecordsPerPage - 1) //循環顯示一頁的各條記錄 
  6.  If recordPtr > Recordset1.getCount() Then //顯示空表 
  7.   Table1.rows(rowCtr).cells(0).innerHTML = "<P> </P>" 
  8.   Table1.rows(rowCtr).cells(1).innerHTML = "<P> </P>" 
  9.   Table1.rows(rowCtr).cells(2).innerHTML = "<P> </P>" 
  10.   Table1.rows(rowCtr).cells(3).innerHTML = "<P> </P>" 
  11.  Else //具體顯示每一頁 
  12.   Recordset1.moveAbsolute(recordPtr) //移動記錄指針。 
  13.   empID = Recordset1.fields.getValue("emp ID"
  14.   empLName = Recordset1.fields.getValue("first name"
  15.   empFName = Recordset1.fields.getValue("last name"
  16.   Table1.rows(rowCtr).cells(0).innerText = recordPtr ' Counter 
  17.   Table1.rows(rowCtr).cells(1).innerText = empID 
  18.   Table1.rows(rowCtr).cells(2).innerText = empLName 
  19.   Table1.rows(rowCtr).cells(3).innerText = empFName 
  20.  End If 
  21.  rowCtr = rowCtr + 1 
  22. Next 
  23. End Sub 

另外,我們還需要在window對象的onload事件中編寫如下腳本:

 

 
  1. For rowCtr = 1 to gRecordsPerPage 
  2.  Table1.insertRow(rowCtr) ' 插一新列 
  3.  For cellCtr = 0 to 3 
  4.   Table1.rows(rowCtr).insertCell() 
  5.  Next 
  6. Next 

第六種:服務器端控制翻頁方法。

如果我們在服務器端對數據進行分頁形成HTML語句后再輸出到客戶端,就不會存在瀏覽器不支持DHTML的問題了??墒怯梅掌鞫朔ㄊ沟梦覀兠看畏摃r,都得讓Recordset控件重新產生一次,因此速度肯定要比用DHTML的方法慢。但如果服務器足夠快的話,這點慢客戶是察覺不到的。

下面的例子中,我將介紹一個新的DTC控件:PageObject。這個控件使被指定的網頁成為一個網頁對象,用戶在此網頁的服務器腳本中組織的子程序和函數可被看作是該網頁對象的方法。它提供了管理狀態信息的一種先進的方法:網頁對象有一些屬性(變量),用戶可以定義這些屬性的生存期。因為以上這些特性,使我們在編制翻頁的腳本時非常方便。

但這種方法的缺點是:當你按了“上頁”或“下頁”按鈕后,再瀏覽器上的按刷新按鈕,網頁會自動翻頁。另外,如果按了瀏覽器上的“回退”按鈕后,再按翻頁按鈕,可能會出現一次亂翻。這都是因為網頁對象屬性(全局變量)造成的。

第一步:拖Recordset控件到新建的網頁emp6.asp中,名字為Recordset1,設置其屬性,方法同第三種,此處略。

第二步:拖PageObject控件到網頁中,取名叫emplist。然后右鍵單擊此控件打開屬性頁并設置MaxPageNumber,RecordsPerPage,CurrrentPageNumber三個屬性(全局變量)。VI6.0可用get和set方法來讀寫它們的值,具體用法請查閱相關資料。

第三步:編寫Recordset1的ondatasetcomplete事件。

 

 
  1. Function Recordset1_ondatasetcomplete() 
  2. recordsPerPage = 5 
  3. empList.setRecordsPerPage(recordsPerPage)//設置網頁對象每頁記錄條數屬性為5 
  4. totalRecordCount = Recordset1.getCount()//獲得記錄集的總條數 
  5. mpn = Int(totalRecordCount / recordsPerPage) //計算出mpn為總頁數 
  6. If (totalRecordCount Mod recordsPerPage) > 0 then 
  7. mpn = mpn + 1 
  8. End If 
  9. empList.setMaxPageNumber(mpn) 
  10. End Function 

第四步:拖四個button控件到網頁中,編寫翻頁控制腳本。我們主要是通過改變網頁對象的CurrentPageNumber屬性的值來實現翻頁。

 

 
  1. Function btnFirst_onclick()' 翻到首頁 
  2.  empList.setCurrentPageNumber(1) 
  3. End Function 
  4. Function btnPrevious_onclick()' 翻到上一頁 
  5.  cpn = empList.getCurrentPageNumber() 
  6.  if cpn > 1 Then 
  7.   empList.setCurrentPageNumber(cpn - 1) 
  8.  End If 
  9. End Function 
  10. Function btnNext_onclick()' 翻到下一頁 
  11.  cpn = empList.getCurrentPageNumber() 
  12.  if cpn < empList.getMaxPageNumber() then 
  13.   empList.setCurrentPageNumber(cpn + 1) 
  14.  End If 
  15. End Function 
  16. Function btnLast_onclick() ' 翻到末頁 
  17.  empList.setCurrentPageNumber( empList.getMaxPageNumber() ) 
  18. End Function 

為保證首次進入該頁時,顯示的是第一頁,我們還得編寫該網頁對象的onEnter事件。

 

 
  1. Function empList_onEnter() 
  2.  If empList.firstEntered Then 
  3.   empList.setCurrentPageNumber(1) 
  4.  End If 
  5. End Function 
  6. 第五步:編寫顯示每一頁的腳本。 
  7. <HR><TABLE BORDER=0><TR>//顯示表頭 
  8. <TH ALIGN="left" WIDTH=35></TH> 
  9. <TH ALIGN="left" WIDTH=150>Emp ID</TH> 
  10. <TH ALIGN="left" WIDTH=200>Last Name</TH> 
  11. <TH ALIGN="left" WIDTH=200>First Name</TH></TR> 
  12. <% 
  13. pageNumber = empList.getCurrentPageNumber()//計算翻頁所需的各種參數,同DHTML法二 
  14. recordsPerPage = empList.getRecordsPerPage() 
  15. startRecord = ((pageNumber - 1) * recordsPerPage) + 1 
  16. lastRecord = Recordset1.getCount() 
  17. For recordPtr = startRecord To (startRecord + recordsPerPage - 1)%> 
  18. <%If Recordset1.EOF = True Then%> 
  19. <TR> 
  20. <TD> </TD> 
  21. <TD> </TD> 
  22. <TD> </TD> 
  23. <TD> </TD> 
  24. </TR> 
  25. <%Else%> 
  26. <%Recordset1.moveAbsolute(recordPtr)%> 
  27. <TR> 
  28. <% If recordPtr <= lastRecord Then %> 
  29. <TD><%=recordptr%></TD> 
  30. <%Else%> 
  31. <TD> </TD> 
  32. <% End If %> 
  33. <TD><%=Recordset1.fields.getValue("emp ID")%></TD> 
  34. <TD><%=Recordset1.fields.getValue("last name")%></TD> 
  35. <TD><%=Recordset1.fields.getValue("first name")%></TD> 
  36. </TR> 
  37. <%End If%> 
  38. <%Next%> 
  39. </TABLE><HR> 

第七種:Data Environment Object Model(數據環境對象模型)法

Data Environment對象模型把ADO對象模型及它的對象----“Connection”,“Command”,“Recordset”,“Field”以及“Parameter”對象----抽象到一個更加容易的表單中。Data Environment Object Model把命令顯露為方法。用戶可以調用這些方法,這些方法會執行這些命令并返回所得到的記錄集。關于DEOM對象模型詳細資料請參考相關書籍。我們來看下面網頁emp7.asp的例子:

第一步:在VI6.0的“project Explorer”窗口中的工程項目上右擊鼠標并從彈出式菜單選擇“Add Data Connection”。根據VI給出的導航提示建立一個到數據庫的連接之后,用戶就添加了一個實現從ASP應用程序訪問數據庫的數據命令。同時,你將會在“Project Explorer”窗口中的global.asa文件下方看到一個“Data Environment”對象。

第二步:右擊“Data Environment”對象然后從彈出式菜單中選擇“Add Data Command”選項,添加一個數據命令Command1。根據VI6.0的導航提示,你可以在Command1 Properties彈出窗口的Genetal頁中選SQL Statement,輸入:select * from emp。按OK返回。

第三步:你創建了這個數據命令后,就已經為該Data Environment對象創建了一個方法,然后就可以從腳本中調用這個方法,而且該方法將會給用戶返回一個記錄集。

thisPage.createDE() //在SOM模式下,thisPage表示當前網頁對象,createDE()方法創建了DE對象。

DE.Command1//執行DE對象的命令,后面可代參數,做有條件查詢時很有用。

Set rs=DE.rsCommand1//DE.rscommand1使得rs對象完全等同于一個ADO的Recordset對象。

第四步:因為rs為ADO對象,所以,以下的實現翻頁代碼完全參照以上介紹的幾種方法,此處略過。

其它還有如FrontPage2000的數據庫導航中實現的方法等,因與本主題無關,此處略。

綜上所述,前面介紹的每種方法都包含了很多新的技術,由于篇幅的關系,無法深入。本文只是想通過實現翻頁這一具體的例子來介紹ASP網頁編程的多種方法;讓大家親身體驗一下VI6.0在編制網頁中的強大功能;了解和熟悉微軟在網頁編程中提出的ADO、DHTML、DTC控件、SOM對象模型和DEOM對象模型的使用方法;希望能給大家在編制網頁時提供更多的選擇和參考。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩亚洲欧美成人| 亚洲国语精品自产拍在线观看| 欧美乱妇40p| 日韩在线视频免费观看高清中文| 亚洲欧美精品suv| 欧美情侣性视频| 国产精品美女免费| www.欧美免费| 精品中文视频在线| 欧美夫妻性视频| 亚洲人成77777在线观看网| 欧洲成人免费视频| 国产视频精品免费播放| 成人欧美一区二区三区黑人| 中文字幕亚洲欧美日韩高清| 97视频国产在线| 国产精品av在线播放| 国产日韩中文字幕在线| 国产精品久久99久久| 精品欧美国产一区二区三区| 一区二区av在线| 亚洲一区二区三| 亚洲天堂网站在线观看视频| 91精品国产91久久久久久| 欧美激情免费视频| 一区二区成人av| 亚洲天堂成人在线| 国产精品美女av| 日韩小视频在线观看| 中文字幕久热精品在线视频| 国产不卡av在线免费观看| 欧美日韩高清区| 国产乱肥老妇国产一区二| 成人福利网站在线观看11| 久久精品国产一区| 国产成人久久久精品一区| 久久91超碰青草是什么| 91高清视频免费观看| 国产精品国产福利国产秒拍| 色哟哟入口国产精品| 国产精品白丝jk喷水视频一区| 韩剧1988在线观看免费完整版| 精品亚洲va在线va天堂资源站| 97在线免费观看视频| 色噜噜久久综合伊人一本| 少妇久久久久久| 国产精品视频资源| 在线观看欧美日韩| 亚洲一区二区中文字幕| 欧美亚洲成人xxx| 国内免费久久久久久久久久久| 91系列在线播放| 国产在线视频91| 另类图片亚洲另类| 欧美夫妻性生活视频| 午夜精品国产精品大乳美女| 中文字幕欧美日韩va免费视频| 亚洲第一天堂无码专区| 91精品国产高清久久久久久91| 日韩欧美国产网站| 国产欧美日韩中文字幕| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲第一天堂无码专区| 欧美一级片久久久久久久| 国产精品丝袜久久久久久不卡| 国产精品www网站| 国产精品情侣自拍| 成人国产在线激情| 日韩精品视频在线播放| 欧美精品久久久久久久免费观看| 久久免费成人精品视频| 久久天天躁狠狠躁老女人| 欧美激情乱人伦一区| 日韩欧美精品网址| 亚洲美女视频网站| 久久亚洲精品成人| 2020久久国产精品| 久久久噜噜噜久久久| 亚洲偷欧美偷国内偷| 亚洲一区二区免费| 国产精品久久久久久久久久久不卡| 国产香蕉精品视频一区二区三区| 精品久久久久久久久久| 成人欧美一区二区三区在线| 亚洲天堂成人在线视频| 久久久久久国产精品美女| 国模精品视频一区二区三区| 日韩经典中文字幕| 久久久人成影片一区二区三区观看| 国产一区深夜福利| 久久乐国产精品| 日韩小视频在线| 91夜夜揉人人捏人人添红杏| 欧美激情久久久| 欧美日韩性视频| 2019中文字幕免费视频| 国产在线精品播放| 午夜精品美女自拍福到在线| 亚洲区免费影片| 国产精品自产拍在线观看| 深夜福利国产精品| 国产精品91在线| 欧美超级免费视 在线| 国产精品丝袜一区二区三区| 日韩美女在线观看一区| 久久久久亚洲精品国产| 岛国视频午夜一区免费在线观看| 黄色一区二区在线观看| 久久福利视频导航| 欧美日韩视频免费播放| 亚洲精品国产福利| 全亚洲最色的网站在线观看| 日韩欧美在线免费观看| 国产成+人+综合+亚洲欧洲| 亚洲精品福利在线观看| 青青草国产精品一区二区| 中文字幕亚洲综合久久| 亚洲视频在线观看免费| 欧美日韩性视频在线| 91久久精品久久国产性色也91| 成人免费黄色网| 久久全国免费视频| 亚洲精品免费av| 亚洲韩国欧洲国产日产av| 欧美日韩另类字幕中文| 日韩美女av在线| 国产精品精品一区二区三区午夜版| 久久91精品国产91久久跳| 欧美在线一级视频| 欧美疯狂性受xxxxx另类| 国产精品永久在线| www.日韩欧美| 亚洲国产精品专区久久| 欧美在线性视频| 国产日韩欧美日韩大片| 97在线视频精品| 成人福利视频在线观看| 欧美巨乳在线观看| 欧美精品久久久久| 久久久女女女女999久久| 亚洲视频国产视频| 中日韩美女免费视频网站在线观看| 欧美一区二区三区免费视| 欧美电影免费观看高清完整| 68精品国产免费久久久久久婷婷| 自拍亚洲一区欧美另类| 日韩成人小视频| 亚洲精品456在线播放狼人| 麻豆国产精品va在线观看不卡| 97久久超碰福利国产精品…| 国产在线精品一区免费香蕉| 最近免费中文字幕视频2019| 欧美有码在线视频| 日日噜噜噜夜夜爽亚洲精品| 日韩一区二区三区在线播放| 亚洲另类图片色| 岛国精品视频在线播放| 精品呦交小u女在线| 亚洲精品电影在线| xvideos亚洲人网站| 午夜精品久久久久久久99热浪潮| 国产精品高潮呻吟久久av黑人| 亚洲剧情一区二区| 欧洲成人午夜免费大片|