日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > 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網站上用得最多的方法,它們的區別僅在實現技巧的不同。這兩種方法的實現最易理解,用到的對象概念也最少,對開發環境的要求也最低(只要記事本就行)。可以說,這兩種方法的實質還是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的問題了。可是用服務器端法使得我們每次翻頁時,都得讓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對象模型的使用方法;希望能給大家在編制網頁時提供更多的選擇和參考。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
日韩精品首页| www中文字幕在线观看| 日韩免费电影网站| 色国产在线视频| 日韩精品视频中文字幕| av三级在线播放| av午夜在线| 亚洲国产综合久久| 亚洲大片精品永久免费| 欧美中文字幕视频在线观看| 久久精品在线免费观看| 在线日韩中文字幕| 最近中文字幕第一页| 亚洲高清视频在线| 国产在线高潮| 精品视频资源站| 日韩视频在线一区二区| 日韩视频免费直播| 日韩在线不卡| 欧美国产综合视频| av三级在线播放| 亚洲免费观看视频| 成年人黄国产| 日韩精品乱码av一区二区| 综合图区亚洲白拍在线| 91精品在线观| 日韩精品福利一区二区三区| 亚洲大片免费看| 91精品国产91久久久久久久久| 精品1区2区3区| 一区二区91| 国产黄色高清在线| 国产在线小视频| 久久婷婷综合国产| 快she精品国产999| 不卡专区在线| 日韩一级免费在线观看| 欧美日韩三级在线| 婷婷久久综合九色国产成人| 在线观看一区| 日韩精品视频在线播放| 91精品久久久久久久91蜜桃| 日韩欧美在线精品| 国产亚洲人成a一在线v站| 久久夜色精品国产欧美乱极品| 日韩精品在线观看视频| 国产午夜精品一区二区三区视频| 亚洲精品中文字幕乱码三区不卡| 亚洲一区二区三区精品中文字幕| 国产一级片播放| 不卡av免费在线| www在线视频| 国产劲爆久久| 欧美日韩一级黄| 91精品国产综合久久香蕉的特点| 亚洲伊人婷婷| 精品全国在线一区二区| 91九色在线播放| 99视频在线看| 日韩精品一级| www在线播放| 91精品国产亚洲| 日韩午夜黄色| 免费视频久久| 欧美91精品| 亚洲一区在线观看网站| 精品日韩在线观看| 中文字幕欧美日韩在线不卡| 国产一区在线观看视频| 欧美片网站免费| 亚洲日产av中文字幕| 黄色片免费在线| 日韩亚洲国产欧美| 在线视频一区二区三区在线播放| 国产婷婷一区二区| 国产欧美日韩综合| 精品一区二区三区中文字幕在线| 国产福利在线播放| 精品欧美不卡一区二区在线观看| 日韩欧美在线精品| 综合激情国产一区| 91精品在线观看入口| 91精品视频观看| 国产欧美日韩第一页| 中文字幕在线导航| 国产一级粉嫩xxxx| 欧美.日韩.国产.一区.二区| 欧美天堂一区二区| 日韩精品福利视频| 精品国产乱码久久久久久蜜臀| 国产aa精品| 国产在线欧美日韩| 日韩.com| 欧美日韩中文字幕综合视频| 91精品在线国产| 日韩中文字幕第一页| 国产99在线 | 亚洲| 91精品久久久久久久久| 91精品国产自产在线丝袜啪| 在线中文字幕视频观看| 国产高清视频一区二区| 欧美国产一级片| 成人一区而且| 欧美日韩国产专区| 亚洲乱码在线观看| 人妻一区二区三区免费| 国产一区不卡精品| 国产高清在线一区| 精品亚洲成a人片在线观看| 午夜伦欧美伦电影理论片| 亚洲欧洲三级| 日韩精品在线私人| 美女在线视频一区| 亚洲免费在线视频一区 二区| 黄色在线资源| 内射国产内射夫妻免费频道| 欧美日韩一二三| 国产高潮久久久| 日韩免费高清一区二区| 国产久卡久卡久卡久卡视频精品| 日韩国产一区| 在线观看中文字幕一区| 欧美日韩中文在线| 精品国产网站在线观看| 精品亚洲成a人片在线观看| 日韩欧美一级在线| 精品日韩视频在线观看| 精品视频在线导航| 91色在线看| 一级特黄aaa大片在线观看| 日韩欧美中文免费| 国产v日产∨综合v精品视频| 中文亚洲欧美| a天堂中文在线官网在线| 国产午夜精品一区二区三区视频| 日韩精品在线网站| 91最新在线| 免费视频国产一区| 欧美日韩一二三| 精品视频123区在线观看| 亚洲第一视频| 91精品高清| 91精品国产色综合久久久蜜香臀| 国产成人va亚洲电影| 欧美日韩国产综合视频在线观看中文| 国产永久在线观看| 黄色一级大片在线免费看国产一| 最新中文字幕在线播放| 国产在线不卡一区| 一区二区三区精品在线| 日韩不卡中文字幕| 午夜视频在线观看一区| 国产一级视频在线播放| 国产在线导航| 亚洲免费中文字幕| 欧美日韩国产系列| 亚洲黄色一区二区| 最新中文字幕在线播放| 中文字幕精品www乱入免费视频| 日韩中文字幕精品视频| 国产午夜在线观看| 国产欧美三级| 国产成人精品av久久| 91精品婷婷国产综合久久| 一区二区三区在线播放视频| 精品乱人伦一区二区三区| 中文字幕在线看精品乱码| 亚洲二区自拍| 欧美一级日韩一级| 亚洲一区日韩精品中文字幕| 精品国内自产拍在线视频| 日韩在线精品视频| 一区在线播放视频| 欧美日韩亚洲综合| 中文字幕亚洲字幕| 美女免费视频一区| 欧美国产三级| 激情五月综合| www 日韩| 精品三区视频| 亚洲男女av一区二区| a在线观看免费视频| 色偷偷一区二区三区| 精品999视频| 亚洲高清精品视频| 国产久卡久卡久卡久卡视频精品| 在线视频你懂得一区| 日韩一级免费在线观看| 欧美日韩国产一区在线| 国产综合成人久久大片91 | 日本国产在线视频| 国产日韩在线亚洲字幕中文| 国产三级精品网站| 日韩在线一区二区| 欧美三级日本三级少妇99| 一区二区三区在线免费| 日韩视频中文字幕| www.91香蕉视频| 欧美日韩国产亚洲一区| 中文字幕在线观看亚洲| 亚洲视频在线观看三级 | 久久久91精品| 亚洲第一香蕉网| 中文字幕亚洲高清| 欧美日韩一二三四| 欧美日韩中文字幕在线| 欧美国产一区视频在线观看| 日韩精品一二三四区| 日韩视频在线一区| 日本精品二区| 一级片免费网站| 亚洲三级国产| 精品无人国产偷自产在线| 免费精品国产自产拍观看| 国产精品一区二三区| 免费视频久久| av中文天堂在线| 国产xxx在线| 国产一区 二区 三区一级| 在线中文字幕视频观看| 韩国一区二区av| 国产一区在线不卡| 福利在线国产| 日韩在线观看视频一区二区| 日韩精品在线看| 日韩中文在线中文网三级| 欧美日韩高清不卡| 久久99蜜桃精品久久久久小说| 国产三级视频网站| 欧美日韩综合在线观看| 久久中文精品| 一区二区三区免费看视频 | 国产一二三四| 天堂中文在线视频| 精品国内自产拍在线视频| 午夜国产福利在线观看| 日韩中文在线字幕| 91精品国产综合久久香蕉的特点| 综合激情国产一区| 国产欧美日韩在线视频| 久久福利视频一区二区| 欧美在线观看视频一区| 最新中文字幕在线播放| 国产一区激情在线| 日韩免费不卡avV| 日韩欧美一级在线播放| 一区二区三区高清在线| 中文字幕亚洲一区二区av在线| 亚洲成年网站在线观看| 日韩中文字幕网| 日韩亚洲不卡在线| 亚洲福利一区二区三区| 中文字幕欧美日韩在线| 91精品在线观看入口| 一级片免费在线播放| 欧美在线视频第一页| 日韩在线视频网| 亚洲综合在线视频| 欧美日韩国产不卡在线看| 久久精品国产91精品亚洲| 亚洲国产无线乱码在线观看| 青青国产91久久久久久| 91精品国产综合久久精品app| www高清在线视频日韩欧美| 亚洲理论中文字幕| 日韩欧美一二三四区| 精品国产免费视频| 久久婷婷中文字幕| 91精品国产综合久久久久久漫画| 精品一二三四| 精品久久久精品| 精品网站999www| 国产激情久久| 成片免费观看| 一区二区精品| 欧美精品一区二区三区在线播放| 精品国产免费视频| 中文字幕在线日韩| 久久精品黄色片| 91精品在线免费观看| 91精品观看| 午夜av一区| 色国产在线视频| 亚洲欧美久久久| 色综合天天综合网天天狠天天| 日韩一级精品| 日韩欧美在线1卡| 日韩精品视频网| 国产免费永久在线观看| 日韩精品视频在线观看免费| 日韩在线 中文字幕| 色综合天天综合网天天狠天天 | 国产高清大尺度一区二区不卡| 91精品国产丝袜白色高跟鞋| 亚洲深夜福利| 亚洲综合中文字幕在线| 日韩精品视频在线观看网址| 国产一级免费| 91精品国产91久久久久久青草| 欧美高清一级片在线| 亚洲免费观看视频| 欧美日韩国产片| 久久久99免费| 国产成人精品三级| 欧美日韩国产一区在线| 黄色一区二区在线观看| 欧美日韩国产一区| 欧美日韩精品在线播放| 欧美日韩亚洲91| 91精品国产自产| 中文字幕 亚洲一区| 天天摸日日摸狠狠添| 亚洲影视资源网| 国产成人精品av久久| 日韩中文字幕二区| av影视在线看| 午夜亚洲一区| 日韩精品一二三四区| 国产婷婷一区二区| 精品欧美日韩在线| 欧洲精品在线一区| 欧美三级日韩在线| 麻豆精品视频入口| av首页在线| 精品1区2区3区| 国产一区精品在线| 日韩av不卡在线观看| 欧美日韩中文字幕日韩欧美| 黄色国产在线| 中文字幕在线国产| 中文字幕欧美日韩精品| 天天综合天天添夜夜添狠狠添| 日韩视频不卡中文| 欧美日韩在线国产| 91久久精品午夜一区二区| 日韩中文字幕视频在线观看| 亚洲欧美中文字幕在线观看| 欧美精选午夜久久久乱码6080| √新版天堂资源在线资源| 日韩视频第二页| 国产中文在线播放| 亚洲最新免费视频| 国产在线不卡一区| 亚洲а∨精品天堂在线| 国产传媒久久久| 国产91一区| 日韩精品在线免费看| 欧美日韩国产系列| 免费一级欧美在线观看视频| 日韩精品视频在线播放| 欧美日韩精品免费看| 日本国产一区| 伊人网站在线| 在线观看国产一级片| 午夜黄色小视频| 欧美日韩三级一区| 99久久婷婷| 人成免费在线视频| 天天综合天天| 国产欧美日韩在线观看| 99精品人妻国产毛片| 日韩精品a在线观看91| 午夜视频在线观看一区| 久久夜色精品国产欧美乱极品 | 日韩欧美综合在线| 精品视频三区| 精品日韩在线| 欧美日韩999| 一区二区不卡视频| av中文资源在线| 国产性一级片| 午夜国产欧美理论在线播放| 精品播放一区二区| 欧美在线中文字幕| 91 中文字幕| 91精品国产91久久久久久青草| 日韩中文首页| 欧美日韩精品国产| 精品日韩欧美| 在线欧美日韩精品| 欧美日韩在线观看成人| 日韩福利视频导航| 91精品国产综合久久精品app| 日韩视频精品在线| 日韩精品视频网| 国产成人精品免费久久久久| 在线一区av| 日韩在线高清视频| 免费高清在线一区| 欧美 日韩 国产 在线观看| 精品欧美不卡一区二区在线观看| 在线日韩中文字幕| 亚洲国产欧美91| 欧美三级视频在线| 国产高清一区| 国产日韩精品在线看| 日韩中文字幕亚洲| 久久久综合精品| 精品国产乱码久久久久久蜜臀| 亚洲免费视频一区|