韩剧1988免费观看全集_久久影视三级福利片_亚洲视频在线观看免费_在线观看欧美日韩_国产亚洲激情在线_亚洲精品美女久久久_欧美国产日韩一区二区在线观看_91在线观看免费高清完整版在线观看_日韩av免费看_国产又爽又黄的激情精品视频_琪琪亚洲精品午夜在线_欧美性猛xxx_不卡毛片在线看_国产亚洲日本欧美韩国_91国内在线视频_精品国产福利视频

當前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細頁面

開發(fā)BtoC電子商務(wù)系統(tǒng)(ASP.NET) 

開發(fā)BtoC電子商務(wù)系統(tǒng)(ASP.NET) 

更新時間:2022-10-18 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

原文還有兩個圖
在對ASP.NET Web表單的編程模型有了基本的認識后,通過應(yīng)用于現(xiàn)實的開發(fā)案例來提高對ASP.NET Web表單內(nèi)在運作機制的了解,以及由此帶來的對系統(tǒng)架構(gòu)的掌控是很有必要的。我們沒有為編程而編程的高貴姿態(tài),我們深深懂得能夠開發(fā)出高效,健壯,強大的應(yīng)用程序始終是編程的終極。我們下面通過一個完整的BToC電子商務(wù)系統(tǒng)的開發(fā)流程來展示ASP.NET Web表單是怎樣具體搭建面向下一代網(wǎng)絡(luò)平臺的。
這是一個典型的基于B/S(瀏覽器/服務(wù)器) 三層架構(gòu)的食品,飲料電子商務(wù)零售系統(tǒng)——“玉米地零食店”。前端為產(chǎn)品瀏覽器,為消費者提供瀏覽/選購商品,下訂單購物等各個環(huán)節(jié)的功能;中間層為銷售商的稅率,優(yōu)惠等商務(wù)邏輯;后端為與整個零售系統(tǒng)相關(guān)的產(chǎn)品,顧客,訂單等數(shù)據(jù)庫。我們采用ASP.NET+IIS 5來構(gòu)建前端和中間層,SQL Server 2000來管理后端數(shù)據(jù)庫,整個系統(tǒng)運行于Windows XP。相關(guān)硬件配置只要滿足上述軟件的基本配置,系統(tǒng)性能便可保證。下面為該網(wǎng)上零售系統(tǒng)的前端界面圖示:

在編制Web 表單商業(yè)前端和中間層之前,我們有必要對后端數(shù)據(jù)庫做一個簡單的介紹。后端數(shù)據(jù)庫 CornfieldGrocer 由4個表組成:產(chǎn)品類別表Categories ,產(chǎn)品細節(jié)表 Details ,產(chǎn)品表 Products ,客戶信息表Customers?紤]到演示系統(tǒng)的的簡潔性,我們沒有添加相關(guān)的存儲過程,視圖,規(guī)則等,這些在實際的系統(tǒng)的開發(fā)中對提高系統(tǒng)的性能是很有必要,尤其是在大數(shù)據(jù)量的情況下。下面為4個表的字段的圖示介紹:

各個表的字段的表義已經(jīng)相當清楚,我們不在這里贅述。我們下面向大家展示一下整個電子商務(wù)零售系統(tǒng)——“玉米地零食店”的物理文件組成及其結(jié)構(gòu),下圖為示意圖:

所有的文件位于ASP.NET站點目錄CornfieldGrocer下,其中還有Web表單頁面用到的圖片子目錄Images下的文件就不再在這里列出了。
下面我們開始編寫前端和中間層代碼,為了更清楚地展示W(wǎng)eb Form ASP.NET的底層代碼構(gòu)造,我們采用記事本來完成整個代碼的編寫過程。需要說明的是在真正的工程項目開發(fā)實踐中,如能借助Visual Studio.Net等可視集成開發(fā)工具,開發(fā)效率會大大提高。但在ASP.NET代碼的底層機制沒有諳熟的情況下,筆者強烈建議初期的開發(fā)學習不妨放在Windows系統(tǒng)自帶的“記事本”這一簡單卻能夠把代碼暴露得相當清晰的工具里。
由于篇幅有限,我們不可能將所有的代碼都在這里展示給大家。如前所述,web.config為每個站點級的基于XML的配置文件,負責一些ASP.NET的安全認證,編碼選擇,診斷測試等ASP.NET的配置工作,為瀏覽器請求ASP.NET Web表單時通過 IIS處理后的第一站。下面為其內(nèi)容:

<configuration>
<system.web>
<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" />
</system.web>
</configuration>


容易看到這里的配置內(nèi)容相當簡單,僅指定請求/發(fā)送的編碼為“UTF-8”。我們對此不再贅述。
global.asax文件及其由后端代碼文件global.asax.cs編譯成的Bin\CornfieldGrocer.dll共同組成該網(wǎng)上零售系統(tǒng)的ASP.NET應(yīng)用程序定義。我們先來看文件global.asax:

<%@ Application Inherits="CornfieldGrocer.Global" %>

該文件只有一行指示符,它表示ASP.NET應(yīng)用程序的定義繼承自Global類,而Global類正是在global.asax.cs文件中定義:

using System;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;

namespace CornfieldGrocer
{
public class Global : System.Web.HttpApplication
{
protected void Session_Start(Object sender, EventArgs e)
{
if (Session["ShoppingCart"] == null)
{
Session["ShoppingCart"] = new CornfieldGrocer.OrderList();
}
}
}
}

在Global類里,我們定義了區(qū)段(Session)意義下的購物卡(ShoppingCart)——這里采用了C#中的索引器。購物卡的類型為CornfieldGrocer命名空間中的OrderList類,在CornfieldGrocer.cs文件中有定義。我們當然也可以在global.asax文件中用腳本語言的形式將上面兩個文件的內(nèi)容合并起來,但那不是ASP.NET推薦的做法,因為腳本語言的第一次執(zhí)行還要進行動態(tài)編譯,這回損失一部分性能,而將CS文件提前編譯成dll文件則會降低這種代價——當然這里的編譯的意思還是指將CS的源代碼文件編譯成微軟中間語言的過程。其次,頁面與后端代碼分離的原則易于項目管理,是Visual Studio.NET推薦的工程性的做法。
文件Default.aspx為整個網(wǎng)上零售系統(tǒng)的前端頁面HTML代碼,Default.aspx.cs為其后端控制Web表單行為的CS代碼。由于篇幅關(guān)系我們這里不再贅述其HTML代碼,實際上從前面給出的前端界面圖示,我們可以基本了解Default.aspx的HTML代碼結(jié)構(gòu)。Style.css文件為Default.aspx文件的頁面樣式定義文件,定義一些頁面元素的顏色,格式,間距等修飾性的東西,我們也不再多言。下面只向大家展示Default.aspx的頁面指示符:

<%@ AutoEventWireup="false" Inherits="CornfieldGrocer.MainForm" %>

我們用“Inherits="CornfieldGrocer.MainForm"”來表示我們的頁面繼承自MainForm類,這樣我們就實現(xiàn)了對ASP.NET Web 表單行為的控制代碼與頁面顯示的HTML的分離。其中“AutoEventWireup="false"”表示頁面事件非自動使能——頁面事件非自動使能的意思是所有頁面事件必須經(jīng)過用戶明確的操作才能觸發(fā),由于該屬性缺省為“true”表示自動使能,但我們的商業(yè)邏輯要求非自動使能,故這里的語句很有必要,否則會引起系統(tǒng)處理的混亂。下面我們來看MainForm類:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace CornfieldGrocer
{
public class MainForm: System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label CurrentCategory;
protected System.Web.UI.WebControls.Label Name;
protected System.Web.UI.WebControls.Label SubTotal;
protected System.Web.UI.WebControls.ImageButton Imagebutton1;
protected System.Web.UI.WebControls.Label Description;
protected System.Web.UI.WebControls.Label Company;
protected System.Web.UI.WebControls.Repeater DetailsListing;
protected System.Web.UI.WebControls.DataList ProductListing;
protected System.Web.UI.WebControls.DataList ShoppingCartList;
protected System.Web.UI.HtmlControls.HtmlSelect CategoryList;
protected System.Web.UI.WebControls.Button btnSelect;
protected System.Web.UI.WebControls.Label Tax;
protected System.Web.UI.WebControls.Label Total;
protected System.Web.UI.WebControls.ImageButton Imagebutton4;
protected System.Web.UI.WebControls.ImageButton Imagebutton5;
protected System.Web.UI.WebControls.ImageButton Imagebutton6;
protected System.Web.UI.HtmlControls.HtmlInputText Qty;
protected System.Web.UI.HtmlControls.HtmlGenericControl CheckoutPanel;
protected System.Web.UI.HtmlControls.HtmlImage SelectedProdPicture;

public MainForm()
{
Page.Init += new System.EventHandler(Page_Init);
}
private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
ProductListing.SelectedIndex = 0;

UpdateProducts();
UpdateShoppingCart();
}
}
private void Page_Init(object sender, EventArgs e)
{
InitializeComponent();
}
private void InitializeComponent()
{
this.btnSelect.Click +=
new System.EventHandler(this.CategoryList_Select);
this.ProductListing.SelectedIndexChanged+=
new System.EventHandler(this.ProductListing_Select);
this.Imagebutton1.Click+=
new ImageClickEventHandler(this.AddBtn_Click);
this.Imagebutton4.Click+=
new ImageClickEventHandler(this.Recalculate_Click);
this.Imagebutton6.Click+=
new ImageClickEventHandler(this.ClearCart_Click);
this.Load +=
new System.EventHandler(this.Page_Load);
}
private void CategoryList_Select(Object sender, EventArgs e)
{
CurrentCategory.Text =
CategoryList.Items[CategoryList.SelectedIndex].Text;
UpdateProducts();
}
private void ProductListing_Select(Object sender, EventArgs e)
{
UpdateProducts();
}
private void AddBtn_Click(Object sender, ImageClickEventArgs e)
{
int productID = Int32.Parse
(ProductListing.DataKeys[ProductListing.SelectedIndex].ToString());

InventoryDB market = new InventoryDB();
DataRow product = market.GetProduct(productID);

CornfieldGrocer.OrderList shoppingCart =
((CornfieldGrocer.OrderList) Session["ShoppingCart"]);

shoppingCart.Add(new CornfieldGrocer.OrderItem(productID,
(String) product["ProductName"],
Double.Parse(product["UnitPrice"].ToString()), 1));

UpdateShoppingCart();
}
private void Recalculate_Click(Object sender, ImageClickEventArgs e)
{
CornfieldGrocer.OrderList shoppingCart =
((CornfieldGrocer.OrderList) Session["ShoppingCart"]);

for (int i=0; i<ShoppingCartList.Items.Count; i++) >
{
HtmlInputText qty =
(HtmlInputText) ShoppingCartList.Items[i].FindControl("Qty");
try
{
shoppingCart[(String) ShoppingCartList.DataKeys][i]].Quantity
= Int32.Parse(qty.Value);
}
catch (Exception)
{
}
}
UpdateShoppingCart();
}
private void ClearCart_Click(Object sender, ImageClickEventArgs e)
{
CornfieldGrocer.OrderList shoppingCart =
((CornfieldGrocer.OrderList) Session["ShoppingCart"]);

shoppingCart.ClearCart();
UpdateShoppingCart();
}
void UpdateProducts()
{
InventoryDB market = new InventoryDB();

int categoryID = Int32.Parse
(CategoryList.Items[CategoryList.SelectedIndex].Value);
ProductListing.DataSource =
market.GetProducts(categoryID).DefaultView;
ProductListing.DataBind();

int productID = Int32.Parse
(ProductListing.DataKeys[ProductListing.SelectedIndex].ToString());
DataRow product = market.GetProduct(productID);

Name.Text = product["ProductName"].ToString();
SelectedProdPicture.Src = product["ImagePath"].ToString();
Description.Text = product["ProductDescription"].ToString();
Company.Text = product["Manufacturer"].ToString();

DetailsListing.DataSource =
market.GetProductCalories(productID).DefaultView;
DetailsListing.DataBind();
}
void UpdateShoppingCart()
{
CornfieldGrocer.OrderList shoppingCart =
((CornfieldGrocer.OrderList) Session["ShoppingCart"]);

SubTotal.Text = String.Format("{0:C}", shoppingCart.SubTotal);
Tax.Text = String.Format("{0:C}", shoppingCart.Tax);
Total.Text = String.Format("{0:C}", shoppingCart.Total);

ShoppingCartList.DataSource=shoppingCart.Values;
ShoppingCartList.DataBind();
}
}
}
MainForm類中共有11個方法,19個保護域。其中的19個保護域和前面給出的前端界面圖示的頁面元素相對應(yīng),這里不再贅述。11個方法中MainForm()為構(gòu)建器,其添加了頁面初始化事件Page_Init(),這是ASP.NET Web表單最先處理的事件,一般進行一些基礎(chǔ)的初始化操作。我們可以看到在Page_Init()中進行了初始化組件InitializeComponent()的操作。Page_Load()事件出現(xiàn)在用戶發(fā)出請求后,頁面裝載的時候,在這里一般可做一些商業(yè)邏輯初始化方面的操作,比如數(shù)據(jù)庫的連接,購物卡的初始化等。我們這里進行了產(chǎn)品展示UpdateProducts()和購物卡的初始化UpdateShoppingCart()的操作。
其他四個方法分別為產(chǎn)品類別的選擇ProductListing_Select(),購買產(chǎn)品的添加AddBtn_Click(),購物卡的重新計算Recalculate_Click(),購物卡的清除ClearCart_Click()都是通過對ASP.NET控件的操作來觸發(fā)相應(yīng)的事件完成商業(yè)邏輯。上面的代碼已經(jīng)展示的相當清楚,我們不再贅述。
最后我們要向大家說明的是中間層商務(wù)邏輯的組件。它由三個類構(gòu)成:庫存數(shù)據(jù)類InventoryDB,訂單項目類OrderItem和訂單列表類OrderList。它們共同在文件CornfieldGrocer.cs文件中定義。自解釋的編程方式已經(jīng)它們的結(jié)構(gòu)展示的相當清除,我們下面只給出該文件的CS源代碼:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections;

namespace CornfieldGrocer
{
public class InventoryDB
{
public DataTable GetProducts(int categoryID)
{
SqlConnection sqlConnect= new SqlConnection
("server=(local);database=CornfieldGrocer;Trusted_Connection=yes");
SqlDataAdapter sqlAdapter1 = new SqlDataAdapter
("Select * from Products where categoryid="+categoryID,sqlConnect);
DataSet products = new DataSet();
sqlAdapter1.Fill(products, "products");
return products.Tables[0];
}
public DataRow GetProduct(int productID)
{
SqlConnection sqlConnect= new SqlConnection
("server=(local);database=CornfieldGrocer;Trusted_Connection=yes");
SqlDataAdapter sqlAdapter1 = new SqlDataAdapter
("Select * from Products where productID=" + productID, sqlConnect);
DataSet product = new DataSet();
sqlAdapter1.Fill(product, "product");
return product.Tables[0].Rows[0];
}
public DataTable GetProductCalories(int productID)
{
SqlConnection sqlConnect = new SqlConnection
("server=(local);database=CornfieldGrocer;Trusted_Connection=yes");
SqlDataAdapter sqlAdapter1 = new SqlDataAdapter
("Select * from Details where productID="+productID,sqlConnect);
DataSet details = new DataSet();
sqlAdapter1.Fill(details, "details");
return details.Tables[0];
}
}

public class OrderItem
{
public int productID;
public int quantity;
public String name;
public double price;
public OrderItem(int productID, String name, double price, int quantity)
{
this.productID = productID;
this.quantity = quantity;
this.name = name;
this.price = price;
}
public int ProductID
{
get { return ProductID; }
}
public int Quantity
{
get { return quantity; }
set { quantity=value; }
}
public String Name
{
get { return name; }
}
public double Price
{
get { return price; }
}
public double Total
{
get { return quantity * price; }
}
}

public class OrderList
{
private Hashtable orders = new Hashtable();
private double taxRate = 0.08;
public double SubTotal
{
get
{
if (orders.Count == 0)
return 0.0;
double subTotal = 0;
IEnumerator items = orders.Values.GetEnumerator();
while(items.MoveNext())
{
subTotal += ((OrderItem) items.Current).Price *
((OrderItem) items.Current).Quantity;
}
return subTotal;
}
}
public double TaxRate
{
get { return taxRate; }
set { taxRate = value; }
}
public double Tax
{
get { return SubTotal * taxRate; }
}
public double Total
{
get { return SubTotal * (1 + taxRate); }
}
public ICollection Values {
get {
return orders.Values;
}
}
public OrderItem this[String name] {
get {
return (OrderItem) orders[name];
}
}
public void Add(OrderItem value)
{
if (orders[value.Name] == null) {
orders.Add(value.Name, value);
}
else
{
OrderItem oI = (OrderItem)orders[value.Name];
oI.Quantity = oI.Quantity + 1;
}
}
public void ClearCart() {
orders.Clear();
}
}
}

需要說明的是我們將三個文件CornfieldGrocer.cs,Default.aspx.cs,Global.asax.cs用編譯命令“csc /t:library /out:CornfieldGrocer.dll cornfieldgrocer.cs default.aspx.cs global.asax.cs”將它們?nèi)糠庋b在CornfieldGrocer命名空間里,雖然這并不是必須的。上面的編譯器輸出CornfieldGrocer.dll文件,我們配置該網(wǎng)上零售站點時只需將該文件拷貝到站點根目錄中的Bin目錄下即可。
到此為止,我們已經(jīng)完整的向大家展示了利用ASP.NET Web表單建立一個小型的網(wǎng)上交易系統(tǒng)的編碼,配置等工作。當然作為演示案例,它還沒有真正系統(tǒng)的完善的性能,安全,界面等各個方面的優(yōu)化考慮和設(shè)計。但它向我們展示的ASP.NET Web表單模型卻非常典型且底層,大家不防在此基礎(chǔ)上通過不斷的修改和擴充來開發(fā)適合自己的交易系統(tǒng)。比如對于Default.aspx文件中AutoEventWireup="false"如果設(shè)置為“true”或去掉這個語句,在運行頁面時會出現(xiàn)什么情況?通過這些練習便會不斷的加深我們對ASP.NET底層的認識,最后達到游刃有余的把握。實際上技術(shù)的學習,尤其是編程,除了一定的興趣和悟性外,大量代碼實例的鍛煉也是很有必要的,這本身就是筆者成長的一個過程,也是本文中筆者竭力要給大家展示的。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
日韩av电影在线播放| 精品呦交小u女在线| 毛片.com| 亚洲欧洲精品在线| 日韩欧美中文字幕视频| 头脑特工队2免费完整版在线观看| 91精品国产高清自在线| 免费xxxxx网站中文字幕| 日本午夜精品理论片a级app发布| 性欧美xxx69hd高清| 久久久午夜视频| 秋霞一区二区| 综合av色偷偷网| 国产欧美日韩一级| 国产一区二区免费在线| 蜜桃免费网站一区二区三区| 在线看免费av| 一级片一区二区三区| 国内成+人亚洲| 在线免费观看h视频| 福利视频一区二区| 国产传媒在线观看| 伊人www22综合色| 国产成人日日夜夜| 日本欧美一区二区| 成人动漫在线观看视频| 日本深夜福利视频| 久久久久一区二区| 综合婷婷亚洲小说| 国产三级精品在线不卡| 一起草av在线| 国产日产欧美视频| 欧美1区2区3区| 欧美丝袜足交| 97碰碰碰免费色视频| 亚洲欧洲精品一区二区精品久久久| 视频免费在线观看| 国产中文字幕免费| 中文字幕欧美人妻精品一区蜜臀| 日日骚欧美日韩| 久久久久亚洲AV成人| 在线观看理论片| 国产精品久久久久久久久久久久久久久久久| 精品免费av一区二区三区| 欧美成人免费视频| 久久亚洲精品中文字幕蜜潮电影| 福利在线网站| 日韩小视频在线观看专区| 五月婷中文字幕| 93久久精品日日躁夜夜躁欧美| 中文字幕欧美国产| 久久99久久久久| 日韩免费久久| 手机福利在线| a级日韩大片| 老司机精品影院| 欧美视频中文一区二区三区在线观看| 午夜影视日本亚洲欧洲精品| 中文字幕无码日韩专区免费| 超碰在线网站| 91丨porny丨对白| 日韩毛片一二三区| 91pony九色| 性囗交免费视频观看| 欧美福利视频一区二区| 婷婷亚洲图片| 亚洲无毛电影| 性欧美大战久久久久久久免费观看| 视频一区在线免费观看| 国产人久久人人人人爽| 中午字幕在线观看| 色综合亚洲图丝熟| 在线一区高清| 亚洲色图美国十次| 91在线视频播放地址| 九色porny在线观看| 欧美日韩在线播放一区二区| 五月天中文字幕| 国产一区二区三区中文字幕| 精品日产乱码久久久久久仙踪林| 精品孕妇一区二区三区| 国产精品久久久久影院亚瑟| 老女人性淫交视频| 91香蕉视频黄| 青青草成人网| 99久久久精品视频| 中文在线а√天堂官网| 99久久精品国产亚洲精品| 国产一区二区三区在线| 色综合久久一区二区三区| 91精品啪在线观看国产81旧版| 在线视频福利| 麻豆国产91在线播放| 日本午夜精品理论片a级app发布| 久久国产精彩视频| av电影网站在线观看| 欧美三区美女| 麻豆精品久久久久久久99蜜桃| 国产激情美女久久久久久吹潮| 国产老妇伦国产熟女老妇视频| 免费黄色在线看| 在线国产日本| 国产一区三区三区| 久久亚洲精品网站| 久草综合在线| 偷拍盗摄高潮叫床对白清晰| 亚洲精品视频久久久| 免费免费啪视频在线观播放| p色视频免费在线观看| 制服丝袜第一页在线观看| 四虎免费在线观看| 日韩加勒比系列| 国产视频久久久久| 欧美久久影院| 欧美日韩精品免费观看视一区二区| 国产鲁鲁视频在线观看特色| www.麻豆av| 亚洲色成人www永久网站| 蜜桃av麻豆av天美av免费| 蜜臀久久99精品久久久久久宅男| 国内精品久久影院| 日本视频在线免费| 中文字幕av一区中文字幕天堂| 黄色大片在线看| 伊人夜夜躁av伊人久久| 亚洲色图综合| 一区二区国产在线观看| 久久狠狠一本精品综合网| 免费在线毛片| 97精品人妻一区二区三区在线| 美女日韩在线中文字幕| 中文字幕人妻色偷偷久久| 97人妻人人澡人人爽人人精品| 天天干天天舔天天射| 一区二区免费在线播放| 欧美日韩精品免费观看视完整| 电影k8一区二区三区久久| 国产精品白浆视频免费观看| 国产精品乱码视频| 成人高清电影网站| 国产免费观看av| 日韩专区第一页| 国产乱在线观看完整版视频| 国产精品国产自产拍高清av| 海角国产乱辈乱精品视频| 狠狠精品干练久久久无码中文字幕| 久久久久久网站| 男人天堂999| 国产精品福利影院| 看黄网站在线| 亚洲欧洲一二区| 大伊香蕉精品视频在线| 久久国产精品精品国产色婷婷| 免费国产在线精品一区二区三区| 国产精品va在线观看视色| 国产专区一区| 97av自拍| 香港日本韩国三级| 国产精品12p| 丁香激情综合国产| 欧美国产日韩在线观看成人| aaa在线免费观看| 久久久亚洲精品一区二区三区| 91精品啪在线观看国产爱臀| 日本欧美一区二区三区乱码| 日韩电影免费一区| 国产精选在线| 欧美中文字幕第一页| 久久久久亚洲AV成人| 深夜成人在线观看| 九九热最新地址| 你懂的成人av| 91九色蝌蚪嫩草| 99精品热视频| 精品自拍一区| www国产精品视频| 日韩在线视频国产| 久久久免费观看| 黄色成年人视频在线观看| 欧美激情视频一区二区三区免费| 欧美日韩一区二区三区四区不卡| 欧美在线视频二区| 在线观看日韩www视频免费| 日日夜夜免费精品| 亚洲欧洲另类精品久久综合| 免费a级毛片在线播放| 神马午夜在线观看| 在线观看免费视频你懂的| 久蕉依人在线视频| 日本午夜在线亚洲.国产| 18free性欧美另类hd| 日本特黄一级片| 九九九在线观看| 伊人亚洲视频| 黄色在线免费看| 国产伦精品一区二区三区在线播放| 男人打飞机网站| 中文字幕久久久久久久| 免费在线观看亚洲| 国产亚av手机在线观看| 国产一区在线免费| 中文字幕一区二区三区电影| 免费的黄色av| 在线视频中文字幕一区二区| 日韩免费视频一区二区视频在线观看| 国产又爽又黄又刺激的软件| 特黄特黄的视频| 人人九九精品视频| 国产97色在线 | 日韩| 91视频欧美| 久久99久久99精品| 精品人妻一区二区三区麻豆91| 户外露出一区二区三区| 国产一区二区在线视频聊天| 精品无人区一区二区三区竹菊| 骚视频在线观看| 黄色aaa视频| 国产精品久久综合av爱欲tv| 久久99精品久久久久久久久久| 黄色一级片网址| 欧美国产日韩在线播放| 黄色91视频| 久久丫精品国产亚洲av不卡| 一级黄色片在线免费观看| 99久久国产综合精品色伊| 国产欧美在线播放| 国产高清自拍视频在线观看| 亚洲黄色免费| 一级黄色录像在线观看| 国产xxxx做受性欧美88| 狠狠躁日日躁夜夜躁av| 国产又黄又粗又硬| xfplay爱情电影网love| 91精品办公室少妇高潮对白| 日韩中文字幕网址| 青青草国产成人99久久| 日韩欧美在线观看| 久久精品视频6| 疯狂蹂躏欧美一区二区精品| 国产精品一区二区视频| 免费黄色成人| 欧美男女性生活在线直播观看| 99久久免费精品国产免费| 在线免费观看av影视天堂| √…a在线天堂一区| 亚洲国产成人一区二区| 成人av在线观| 成人精品视频一区二区三区| 日韩一级裸体免费视频| 亚洲欧洲精品一区二区| 亚洲字幕一区二区| 精品视频一区二区三区| 大桥未久恸哭の女教师| 在线 亚洲欧美在线综合一区| 欧美一级黄色带| 97最新国自产拍视频在线完整在线看| 中文字幕一区二区人妻| 五月婷婷色综合| 香蕉精品视频在线| 精品樱空桃一区二区三区| 最新中文字幕2018| 亚洲av永久纯肉无码精品动漫| 91嫩草在线视频| 91在线你懂得| 无码aⅴ精品一区二区三区浪潮| 日韩成人亚洲| 亚洲性色av| 欧美成人精品1314www| 视频国产一区二区三区| 亚洲人成网站在线播| 麻豆传媒网站在线观看| 免费一级特黄3大片视频| 美美哒免费高清在线观看视频一区二区| 男人的天堂一区| 做爰高潮hd色即是空| 国产手机视频在线观看| 7777在线| 国产综合欧美在线看| 一区二区三区电影网| 亚洲精品久久久中文字幕| 欧洲一区二区三区在线| 日韩在线免费视频观看| 成人黄色免费短视频| 久久久久久www| 99国产精品久久久久久久| 在线一区免费| 国产美女精品视频国产| 国产亚洲天堂网| 九九热精品免费视频| 91麻豆精品久久毛片一级| 亚洲美免无码中文字幕在线| 中文字幕你懂的| 毛片av在线播放| 久草综合在线视频| 亚洲精品无码久久久久久久| 亚洲午夜久久久久久久久电影院| 久久的精品视频| 国产精品伦理| 亚洲图片在线播放| 91chinesevideo永久地址| 两女双腿交缠激烈磨豆腐| 中文字幕在线三区| 久久久久久久久久久99999| 久久国产精品99国产| 中文字幕第一页在线播放| 超碰成人97| 91wwwcom在线观看| 一卡二卡三卡四卡五卡| 国产精品国产三级国产普通话99| 视频在线观看免费影院欧美meiju| 色哟哟中文字幕| 伊人免费在线观看高清版| 国产一二三四五| 成人短剧在线观看| 911精品国产一区二区在线| 亚洲欧洲另类精品久久综合| 污片免费在线观看| 一区二区三区视频免费看| 国产在线欧美| 99久久精品久久亚洲精品| 调教一区二区| 最新在线你懂的| 日本免费一区二区三区四区| 囯产精品一品二区三区| 成年人精品视频| 激情小说图片视频| 美国一级黄色录像| 一区二区三区午夜探花|