日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

一步一步asp.net_三层构架的学习

發布時間:2025/3/15 asp.net 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一步一步asp.net_三层构架的学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

總結一下現在做的項目,由于混亂的項目經驗,我就全部重新寫了以前的一個項目,搭建的是簡單三層架構的模式,簡單三層是我第一個認識的架構層次的理念,也是影響非常深的,以前只是理論的學學什么設計模式,什么mvc,但是這些根本太遙遠,因為沒有編碼經驗,沒有項目經驗,永遠也無法體會架構之美,更有甚者,認為這些架構太復雜了,還要花時間,仍然是那種業務數據UI混合的模式,然后混雜大量的增刪改查,再加上大量的ctrl+c或者ctrl+v的代碼,以至于面向對象的東西,做了大半年除了封裝類,沒有什么跟面向對象有關系的了.....純屬面向過程+class的模式.那么什么是面向對象,這個問題,太難回答了,面向對象,簡單地說就是拿人的思維去解決問題.

? 人的思維是復雜的,因此,有了復雜的分工,因此我們在學習面向對象的時候更重要的是想象著,

人怎么做?

回歸正題:三層構架

三層構架,說到底就是一個簡單的分層概念,一個數據訪問層,業務邏輯層,和UI層,而我們經常見到的,

BLL就是業務邏輯層,DAL就是數據訪問層,czcraft網站就是所謂的UI層,而Model是什么呢?這和MVC的model又有什么區別?

model其實就是實體層,因為為了在BLL和DAL以及Ui層傳輸數據,我們要借助model這個實體層來傳輸數據,

比如我們注冊一個帳號信息,

我們可以把所有收集到的帳號信息,保存在一個member的實體類中,然后傳入給BLL處理.

BLL就是業務邏輯層,我們經常會遇到這樣一個現象:

一個asp.net WebForm界面,一個事件大量的代碼

這種代碼,如果一百個登錄是不是要復制一百份,當我們復制的第二次就要考慮怎么復用.

這時候我們想象,為什么要把這些業務寫到事件中?

我們首先要做的就是第一步分離,我們可以嘗試定義一個類的方式,這是第一步的分離,設計一個member類,里面封裝了,member的各種字段和方法,比如登錄,等等,

這是第一步的分離,這樣的好處就是可以復用方法,不用復制復制再次復制,但是這樣子邏輯和數據訪問仍然寫死在一個類中,如果我們要修改比如一個細節,

1.以前登陸都是明文,現在要加密,結果我們又要修改.

2.如果以前數據庫刪除一條會員信息,沒有做級聯刪除(比如關聯會員的其他信息,比如會員購買記錄的信息等),現在要增加,結果又是大量的修改.

為什么我們不分理出數據和操作,以及UI顯示?

我們分離出DAL,專門負責數據庫操作,不管業務邏輯,BLL只負責業務邏輯,

當然為了考慮多種數據庫的兼容設計,我們可以再加一層,IDAL接口層,

當然我們的數據庫操作類也最好設計成兼容多種數據庫的模式,

關于DAL,BLL,我就舉一個實例,比如會員信息,DAL的形式就是這樣,

1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: using czcraft.Model; 6: using System.Data; 7: using System.Data.SqlClient; 8: using System.Data.Common; 9: namespace czcraft.DAL 10: /* 11: * 作者: Sweet 12: * 創建時間: 2012/5/5 10:13:44 13: * 類說明: czcraft.DAL 14: */ 15: { 16: ///<summary> 17: ///member表DAL 18: ///</summary> 19: public partial class memberDAL 20: { 21: DBO.DBOperator SqlHelper = DBO.DBOperator.instance(); 22: /// <summary> 23: /// 增加member 24: /// </summary> 25: /// <param name="model">tableName實體</param> 26: /// <returns>執行狀態</returns> 27: public int AddNew(member model) 28: { 29: string sql="insert into member(username,password,Sex,nation,mobilephone,Telephone,Email,qq,Zipcode,Address,states,VCode,VTime) output inserted.Id values(@username,@password,@Sex,@nation,@mobilephone,@Telephone,@Email,@qq,@Zipcode,@Address,@states,@VCode,@VTime)"; 30: int id=(int)SqlHelper.ExecuteScalar(sql 31: ,(DbParameter)new SqlParameter("username",model.username) 32: ,(DbParameter)new SqlParameter("password",model.password) 33: ,(DbParameter)new SqlParameter("Sex",model.Sex) 34: ,(DbParameter)new SqlParameter("nation",model.nation) 35: ,(DbParameter)new SqlParameter("mobilephone",model.mobilephone) 36: ,(DbParameter)new SqlParameter("Telephone",model.Telephone) 37: ,(DbParameter)new SqlParameter("Email",model.Email) 38: ,(DbParameter)new SqlParameter("qq",model.qq) 39: ,(DbParameter)new SqlParameter("Zipcode",model.Zipcode) 40: ,(DbParameter)new SqlParameter("Address",model.Address) 41: ,(DbParameter)new SqlParameter("states",model.states) 42: ,(DbParameter)new SqlParameter("VCode",model.VCode) 43: ,(DbParameter)new SqlParameter("VTime",model.VTime) 44: ); 45: return id; 46: } 47: /// <summary> 48: /// 更新member實體 49: /// </summary> 50: /// <param name="model">tableName實體</param> 51: /// <returns>執行狀態</returns> 52: public bool Update(member model) 53: { 54: string sql="update member set username=@username,password=@password,Sex=@Sex,nation=@nation,mobilephone=@mobilephone,Telephone=@Telephone,Email=@Email,qq=@qq,Zipcode=@Zipcode,Address=@Address,states=@states where id=@id"; 55: return SqlHelper.ExecuteNonQuery(sql 56: ,(DbParameter)new SqlParameter("Id",model.Id) 57: ,(DbParameter)new SqlParameter("username",model.username) 58: ,(DbParameter)new SqlParameter("password",model.password) 59: ,(DbParameter)new SqlParameter("Sex",model.Sex) 60: ,(DbParameter)new SqlParameter("nation",model.nation) 61: ,(DbParameter)new SqlParameter("mobilephone",model.mobilephone) 62: ,(DbParameter)new SqlParameter("Telephone",model.Telephone) 63: ,(DbParameter)new SqlParameter("Email",model.Email) 64: ,(DbParameter)new SqlParameter("qq",model.qq) 65: ,(DbParameter)new SqlParameter("Zipcode",model.Zipcode) 66: ,(DbParameter)new SqlParameter("Address",model.Address) 67: ,(DbParameter)new SqlParameter("states",model.states) 68: //,(DbParameter)new SqlParameter("VCode",model.VCode) 69: //,(DbParameter)new SqlParameter("VTime",model.VTime) 70: ); 71: } 72: /// <summary> 73: /// 刪除member 74: /// </summary> 75: /// <param name="id">id</param> 76: /// <returns>執行狀態</returns> 77: public bool Delete(int id) 78: { 79: return SqlHelper.ExecuteNonQuery("delete from member where id=@id", 80: (DbParameter)new SqlParameter("id",id)); 81: } 82: /// <summary> 83: /// 刪除member 84: /// </summary> 85: /// <param name="strID">strID,記得多個用,隔開</param> 86: /// <returns>執行狀態</returns> 87: public bool DeleteMoreID(string strID) 88: { 89: return SqlHelper.ExecuteNonQuery("delete from member where id in ("+strID+")"); 90: } 91: /// <summary> 92: /// 將DataRow轉化為Model實體 93: /// </summary> 94: /// <param name="row">DataRow信息</param> 95: /// <returns>執行狀態</returns> 96: private static member ToModel(DataRow row) 97: { 98: member model=new member(); 99: model.Id =row.IsNull("Id")?null:(System.Int32?)row["Id"]; 100: model.username =row.IsNull("username")?null:(System.String)row["username"]; 101: model.password =row.IsNull("password")?null:(System.String)row["password"]; 102: model.Sex =row.IsNull("Sex")?null:(System.String)row["Sex"]; 103: model.nation =row.IsNull("nation")?null:(System.String)row["nation"]; 104: model.mobilephone =row.IsNull("mobilephone")?null:(System.String)row["mobilephone"]; 105: model.Telephone =row.IsNull("Telephone")?null:(System.String)row["Telephone"]; 106: model.Email =row.IsNull("Email")?null:(System.String)row["Email"]; 107: model.qq =row.IsNull("qq")?null:(System.String)row["qq"]; 108: model.Zipcode =row.IsNull("Zipcode")?null:(System.String)row["Zipcode"]; 109: model.Address =row.IsNull("Address")?null:(System.String)row["Address"]; 110: model.states =row.IsNull("states")?null:(System.String)row["states"]; 111: model.VCode =row.IsNull("VCode")?null:(System.String)row["VCode"]; 112: model.VTime =row.IsNull("VTime")?null:(System.DateTime?)row["VTime"]; 113: return model; 114: } 115: /// <summary> 116: /// 根據id獲取tableName實體信息 117: /// </summary> 118: /// <param name="id">id</param> 119: /// <returns>執行狀態</returns> 120: public member Get(int id) 121: { 122: DataTable dt=SqlHelper.ExecuteDataTable("select * from member where id=@id", 123: (DbParameter)new SqlParameter("id",id)); 124: if(dt.Rows.Count>1){ 125: throw new Exception("more than 1 row was found"); 126: } 127: if(dt.Rows.Count<=0){return null;} 128: DataRow row=dt.Rows[0]; 129: member model=ToModel(row); 130: return model; 131: } 132: /// <summary> 133: /// 列出tableName所有的實體信息 134: /// </summary> 135: /// <returns>執行狀態</returns> 136: public IEnumerable<member> ListAll() 137: { 138: List<member> list=new List<member>(); 139: DataTable dt=SqlHelper.ExecuteDataTable("select * from member"); 140: foreach(DataRow row in dt.Rows){ 141: list.Add(ToModel(row)); 142: } 143: return list; 144: } 145: ? 146: /// <summary> 147: ///分頁獲取數據 148: /// </summary> 149: /// <param name="tableName">表名</param> 150: /// <param name="InnerJoin">內連接</param> 151: /// <param name="strGetFields">返回的列信息</param> 152: /// <param name="sortId">排序的列名</param> 153: /// <param name="PageSize">每頁記錄數</param> 154: /// <param name="PageIndex">頁數</param> 155: /// <param name="OrderType">排序類型排序類型, 非0 值則降序</param> 156: /// <param name="strWhere">查詢條件(注意: 不要加where) </param> 157: public IEnumerable<member> ListByPagination(string tableName,string InnerJoin,string strGetFields,string sortId,int PageSize,int PageIndex,string OrderType,string strWhere) 158: { 159: List<member> list=new List<member>(); 160: DataTable dt=SqlHelper.ExecuteDataTable("exec[pagination] @tableName,@InnerJoin,@strGetFields,@sortId,@PageSize,@PageIndex,@doCount,@OrderType,@strWhere",(DbParameter)new SqlParameter("tableName",tableName),(DbParameter)new SqlParameter("@InnerJoin",InnerJoin),(DbParameter)new SqlParameter("@strGetFields",strGetFields),(DbParameter)new SqlParameter("@sortId",sortId),(DbParameter)new SqlParameter("@PageSize",PageSize),(DbParameter)new SqlParameter("@PageIndex",PageIndex),(DbParameter)new SqlParameter("@doCount","0"),(DbParameter)new SqlParameter("@OrderType",OrderType),(DbParameter)new SqlParameter("@strWhere",strWhere)); 161: foreach(DataRow row in dt.Rows){ 162: list.Add(ToModel(row)); 163: } 164: return list; 165: } 166: /// <summary> 167: ///獲取表總記錄個數(不用加where) 168: /// <param name="strWhere">查詢條件(不用加where)</param> 169: /// <summary> 170: public int GetCount(string strWhere) 171: { 172: if(!string.IsNullOrEmpty(strWhere)) 173: strWhere=" where "+strWhere; 174: return SqlHelper.ExecuteSelectFirstNum("select count(1) from member"+strWhere); 175: } 176: } 177: }

這里是用代碼生成器生成的,我自己寫的一個簡單的代碼生成器,為了學習代碼生成器,專門設計了一個簡單的,

這里注意,因為代碼生成器的原因,我們必須把自己寫的方法等,通過部分類的方式合并,所以,我們都要加上partial 關鍵字,這很重要

可以看到DAL主要涉及的都是純種的增刪改查操作,他不用管具體有沒有權限之類的,這些不是

他的活,為什么要他干?

接下來就是BLL層,業務邏輯層,我們經常碰到,前期不需要功能,后期增加進去,以前沒有權限判斷,以前沒有加密要求,以前的加密太簡單,現在要更改一種更好的方法,結果要修改好多東西,這樣就全部寫在業務邏輯層,他只負責業務邏輯的判斷,然后提供給UI數據,

1: /// <summary> 2: /// 判定查詢條件 3: /// </summary> 4: /// <param name="info"></param> 5: /// <returns></returns> 6: public static string ConfirmCondition(string info) 7: { 8: string condition = "";//查詢條件 9: if (Tools.IsNumber(info)) //如果是數字,則查詢id 10: { 11: condition = "id like '%" + info + "%'"; 12: } 13: else condition = "username like '%" + info + "%'"; //查詢用戶名 14: return condition; 15: } 16: /// <summary> 17: /// 檢查用戶名和郵箱 18: /// </summary> 19: /// <param name="UserName">用戶名</param> 20: /// <param name="Email">郵箱</param> 21: /// <returns></returns> 22: public bool CheckUserNameAndEmail(string UserName,string Email) 23: { 24: memberDAL dal=new memberDAL (); 25: member info = dal.GetMemberInfo(UserName); 26: return Email==info.Email; 27: } 28: /// <summary> 29: /// 隨機生成一個6位的密碼 30: /// </summary> 31: /// <returns></returns> 32: public string CreateNewPwd() 33: { 34: string Pwd=""; 35: Random ran=new Random (DateTime.Now.Second); 36: for (int i = 0; i < 6; i++) 37: { 38: Pwd += ran.Next(1, 10); 39: } 40: return Pwd; 41: } 42: /// <summary> 43: /// 修改密碼 44: /// </summary> 45: /// <param name="UserName">用戶名</param> 46: /// <param name="Pwd">密碼</param> 47: /// <returns></returns> 48: public bool UpdatePwd(string UserName, string Pwd) 49: { 50: return new memberDAL().UpdatePassword(UserName, Tools.GetMD5(Pwd)); 51: } 52: /// <summary> 53: /// 修改密碼 54: /// </summary> 55: /// <param name="UserName">用戶名</param> 56: /// <param name="oldPwd">舊密碼</param> 57: /// <param name="newPwd">新密碼</param> 58: /// <returns></returns> 59: public bool UpdatePassword(string UserName, string oldPwd, string newPwd) 60: { 61: memberDAL dal = new memberDAL(); 62: string Pwd = dal.GetPassword(UserName); 63: if (Pwd == Tools.GetMD5(oldPwd)) 64: { 65: //加密并且更新 66: return dal.UpdatePassword(UserName, Tools.GetMD5(newPwd)); 67: } 68: return false; 69: } 70: /// <summary> 71: /// 更新member實體 72: /// </summary> 73: /// <param name="model">member實體</param> 74: /// <param name="IsUserNameUpdate">是否采用用戶名更新</param> 75: /// <returns></returns> 76: public bool UpdateUserInfo(member model) 77: { 78: return new memberDAL().Update(model, true); 79: } 80: /// <summary> 81: /// 檢驗用戶名是否存在 82: /// </summary> 83: /// <param name="userName"></param> 84: /// <returns></returns> 85: public bool CheckExistUserName(string userName) 86: { 87: return new memberDAL().GetCount(string.Format(" username='{0}'", userName)) == 0; 88: } 89: /// <summary> 90: /// 驗證用戶信息 91: /// </summary> 92: /// <param name="UserName">用戶名</param> 93: /// <param name="GuidInfo">guid隨機碼</param> 94: public bool ActivationMemberNumber(string UserName, string GuidInfo) 95: { 96: memberDAL dal = new memberDAL(); 97: //獲取過期時間 98: DateTime dt = dal.GetMemberVTime(UserName, GuidInfo); 99: //如果已經過期 100: if (dt < DateTime.Now) 101: { 102: return false; 103: } 104: else 105: { 106: //激活帳號 107: return dal.ActivationMemberStatus(UserName); 108: } 109: } 110: /// <summary> 111: /// 用戶登錄 112: /// </summary> 113: /// <param name="info">會員model</param> 114: /// <returns></returns> 115: public bool MemberLogin(member info) 116: { 117: info.password = Tools.GetMD5(info.password); 118: return new memberDAL().MemberLogin(info); 119: } 120: /// <summary> 121: /// 檢驗密碼是否正確 122: /// </summary> 123: /// <param name="UserName">用戶名</param> 124: /// <param name="Password">密碼</param> 125: /// <returns></returns> 126: public bool CheckPwd(string UserName, string Password) 127: { 128: //先不加密,以后全部都要加密 129: string Pwd = Tools.GetMD5(new memberDAL().GetPassword(UserName)); 130: if (Password == Pwd) 131: { 132: return true; 133: } 134: else 135: return false; 136: } 137: /// <summary> 138: /// 返回驗證組件的數組格式(Validate) 139: /// </summary> 140: /// <param name="fieldId">字段</param> 141: /// <param name="Status">狀態</param> 142: /// <param name="errorMsg">錯誤消息(沒有則"")</param> 143: /// <returns></returns> 144: public string ReturnValueValidateAjax(string fieldId, bool Status, string errorMsg) 145: { 146: 147: if (string.IsNullOrEmpty(errorMsg)) 148: { 149: return "[\"" + fieldId + "\",\"" + Status + "\"]"; 150: } 151: return "[\"" + fieldId + "\",\"" + Status + "\",\""+errorMsg+"\"]"; 152: 153: } 154: ? 155: /// <summary> 156: /// 返回給客戶端的json格式數據(用于根據用戶登錄狀態決定) 157: /// </summary> 158: /// <param name="info"></param> 159: /// <returns></returns> 160: public string ReturnJson(member info, out bool Status) 161: { 162: //登錄狀態 163: Status = MemberLogin(info); 164: //生成json格式數據 165: return WriteJsonForReturn(Status, info.username); 166: ? 167: } 168: /// <summary> 169: /// 記住帳號和密碼的枚舉 170: /// </summary> 171: public enum RememberType 172: { 173: /// <summary> 174: /// 記住帳號 175: /// </summary> 176: RememberName = 0, 177: /// <summary> 178: /// 同時記住帳號和密碼 179: /// </summary> 180: RememberNameAndPwd = 1, 181: /// <summary> 182: /// 不記住帳號密碼 183: /// </summary> 184: NoRemember = 2 185: } 186: ? 187: /// <summary> 188: /// 根據保存帳號密碼狀態判斷是保存帳號還是同時保存帳號和密碼 189: /// </summary> 190: /// <param name="IsSaveName">"1"代表保存,"0"代表不保存</param> 191: /// <param name="IsSavePwd">"1"代表保存,"0"代表不保存</param> 192: /// <returns></returns> 193: public RememberType GetRememberType(string IsSaveName, string IsSavePwd) 194: { 195: RememberType SaveType = RememberType.NoRemember; 196: ? 197: //保存帳號和密碼 198: if (IsSaveName.Equals("1") && IsSavePwd.Equals("1")) 199: { 200: SaveType = RememberType.RememberNameAndPwd; 201: } 202: //保存帳號 203: if (IsSaveName.Equals("1") && !IsSavePwd.Equals("1")) 204: { 205: SaveType = RememberType.RememberName; 206: } 207: else if (!IsSaveName.Equals("1")) 208: { 209: SaveType = RememberType.NoRemember; 210: } 211: return SaveType; 212: } 213: /// <summary> 214: /// 根據用戶名獲取用戶信息(返回json數據) 215: /// </summary> 216: /// <param name="UserName">用戶名</param> 217: /// <returns></returns> 218: public string GetMemberInfoByJson(string UserName) 219: { 220: bool Status = false; 221: member info = new memberDAL().GetMemberInfo(UserName); 222: if (info.Id.HasValue) 223: { 224: Status = true; 225: } 226: StringBuilder json = new StringBuilder(); 227: StringWriter sw = new StringWriter(json); 228: using (JsonWriter jsonWriter = new JsonTextWriter(sw)) 229: { 230: jsonWriter.Formatting = Formatting.Indented; 231: jsonWriter.WriteStartObject(); 232: jsonWriter.WritePropertyName("Status"); 233: jsonWriter.WriteValue(Status); 234: jsonWriter.WritePropertyName("Data"); 235: jsonWriter.WriteStartArray(); 236: jsonWriter.WriteStartObject(); 237: jsonWriter.WritePropertyName("UserName"); 238: jsonWriter.WriteValue(info.username); 239: jsonWriter.WritePropertyName("Sex"); 240: jsonWriter.WriteValue(info.Sex); 241: jsonWriter.WritePropertyName("Nation"); 242: jsonWriter.WriteValue(info.nation); 243: //mobilephone Telephone Email qq Zipcode Address 244: jsonWriter.WritePropertyName("MobilePhone"); 245: jsonWriter.WriteValue(info.mobilephone); 246: jsonWriter.WritePropertyName("TelePhone"); 247: jsonWriter.WriteValue(info.Telephone); 248: jsonWriter.WritePropertyName("Email"); 249: jsonWriter.WriteValue(info.Email); 250: jsonWriter.WritePropertyName("QQ"); 251: jsonWriter.WriteValue(info.qq); 252: jsonWriter.WritePropertyName("ZipCode"); 253: jsonWriter.WriteValue(info.Zipcode); 254: //地址處理 255: ? 256: string[] strAddresss = GetSplitAddress(info.Address); 257: string Province = ""; 258: string City = ""; 259: string Country = ""; 260: string Address = ""; 261: if (strAddresss.Count() > 0) 262: { 263: Province = strAddresss[0]; 264: City = strAddresss[1]; 265: Country = strAddresss[2]; 266: Address = strAddresss[3]; 267: ? 268: } 269: jsonWriter.WritePropertyName("Province"); 270: jsonWriter.WriteValue(Province); 271: jsonWriter.WritePropertyName("City"); 272: jsonWriter.WriteValue(City); 273: jsonWriter.WritePropertyName("Country"); 274: jsonWriter.WriteValue(Country); 275: jsonWriter.WritePropertyName("Address"); 276: jsonWriter.WriteValue(Address); 277: jsonWriter.WriteEndObject(); 278: ? 279: jsonWriter.WriteEndArray(); 280: jsonWriter.WriteEndObject(); 281: } 282: return json.ToString(); 283: } 284: /// <summary> 285: /// 地址分割(將用戶信息表中的地址分割成 省(編號) 市(編號) 縣(編號) 家住址 286: /// </summary> 287: /// <param name="Address">地址</param> 288: /// <returns></returns> 289: public string[] GetSplitAddress(string Address) 290: { 291: string[] str = Address.Split('|'); 292: return str; 293: } 294: /// <summary> 295: /// 檢查用戶登錄狀態,用于驗證自動登錄(并返回json格式) 296: /// </summary> 297: /// <returns></returns> 298: public string CheckLoginStatus(out bool Status) 299: { 300: ? 301: //登錄狀態 302: Status = true; 303: string UserName = Common.CookieHelper.GetCookieValue("UserName"); 304: //如果cookies為空,直接返回 305: if (Tools.IsNullOrEmpty(UserName)) 306: { 307: Status = false; 308: } 309: string Pwd = Common.CookieHelper.GetCookieValue("Pwd"); 310: if (Tools.IsNullOrEmpty(Pwd)) 311: { 312: Status = false; 313: } 314: else 315: { 316: //查找該用戶真實密碼,并進行md5加密 317: string password = new memberDAL().GetPassword(UserName); 318: //如果兩次密碼相同則可以自動登陸了 319: if (password!=Pwd) 320: { 321: Status = false; 322: } 323: } 324: ? 325: //生成json格式數據 326: return WriteJsonForReturn(Status, UserName); 327: } 328: /// <summary> 329: /// 為用戶登錄寫入json數據 330: /// </summary> 331: /// <param name="Status">登錄狀態</param> 332: /// <param name="UserName">用戶名</param> 333: /// <returns></returns> 334: public string WriteJsonForReturn(bool Status, string UserName) 335: { 336: StringBuilder json = new StringBuilder(); 337: StringWriter sw = new StringWriter(json); 338: using (JsonWriter jsonWriter = new JsonTextWriter(sw)) 339: { 340: jsonWriter.Formatting = Formatting.Indented; 341: jsonWriter.WriteStartObject(); 342: jsonWriter.WritePropertyName("Status"); 343: jsonWriter.WriteValue(Status); 344: jsonWriter.WritePropertyName("UserName"); 345: jsonWriter.WriteValue(UserName); 346: jsonWriter.WriteEndObject(); 347: } 348: return json.ToString(); 349: } 350: /// <summary> 351: /// 記住用戶信息 352: /// </summary> 353: /// <param name="Type">記住用戶信息類別</param> 354: /// <returns></returns> 355: public bool RememberUserInfo(member info, RememberType type) 356: { 357: if (type == RememberType.RememberName) 358: { 359: //記住帳號7天 360: CookieHelper.SetCookie("UserName", info.username, DateTime.Now.AddDays(7)); 361: } 362: else if (type == RememberType.RememberNameAndPwd) 363: { 364: ? 365: //md5哈希加密 366: string sercret = Tools.GetMD5(info.password); 367: //同時記住帳號和密碼7天 368: CookieHelper.SetCookie("UserName", info.username, DateTime.Now.AddDays(7)); 369: CookieHelper.SetCookie("Pwd", sercret, DateTime.Now.AddDays(7)); 370: } 371: else 372: { 373: return false; 374: } 375: return true; 376: ? 377: } 378: ? 379: ? 380: } 381: }

?

可以看到,這里沒有任何數據庫的操作,他只負責業務邏輯判斷,然后給UI提供數據.

而web的UI層,我們以前經常性碰到這樣的代碼,

1: /// <summary> 2: /// 網頁中間顯示的涵數condiction顯示條件,nums顯示行數 3: /// </summary> 4: /// <param name="condiction"></param> 5: /// <param name="nums"></param> 6: public void Show(string condiction, int nums) 7: { 8: ? 9: string sql = ""; 10: //還要修改 11: string id = ""; 12: string picturepath = ""; 13: string name = ""; 14: string appreciation = ""; 15: string reward = ""; 16: string title = ""; 17: string time = ""; 18: string ArticleHtmlUrl = ""; 19: StringBuilder content = new StringBuilder();//高效率拼接字符串 20: if (condiction == "大師風采") 21: { 22: sql = "select top " + nums + " hit,id,name,appreciation,Reward,Picturepath from master where state='1' and state1='1' order by master.rank desc"; 23: DataTable dt = cs.GetDataSet(sql).Tables[0]; 24: ? 25: ? 26: for (int i = 0; i < dt.Rows.Count; i++) 27: { 28: id = dt.Rows[i]["id"].ToString(); 29: picturepath = dt.Rows[i]["Picturepath"].ToString(); 30: picturepath = GetPicturePath(picturepath); 31: name = dt.Rows[i]["name"].ToString(); 32: ? 33: //appreciation = GetTile(dt.Rows[i]["appreciation"].ToString().Replace("<br>","\r\n")); 34: //reward = GetTile(dt.Rows[i]["Reward"].ToString().Replace("<br>", "\r\n")); 35: if (i == 0) { 36: content.Append("<div class='r_s_p m_border'>"); 37: } 38: else 39: { 40: content.Append("<div class='r_s_p'>"); 41: } 42: content.Append("<div class='gk_pic'><img src='" + picturepath + "' alt='" + dt.Rows[i]["name"].ToString() + "'/></div>"); 43: ? 44: content.Append("<div class='master_p'>"); 45: ? 46: content.Append("<p><strong><a href='Masterintro.aspx?id=" + id + "'>" + name + "</a></strong></p>"); 47: ? 48: content.Append("<div class='honor'><ul>"); 49: ? 50: content.Append("<li><a href='Masterintro.aspx?id=" + id + "'>" + appreciation + "</a></li>"); 51: ? 52: content.Append("<li><a href='Masterintro.aspx?id=" + id + "'>" + reward + "</a></li>"); 53: content.Append("</ul></div></div></div>"); 54: ? 55: content.Append("<div class='master_border'>&nbsp;</div>"); 56: ? 57: } 58: ? 59: Response.Write(content.ToString()); 60: return; 61: ? 62: } 63: ? 64: ? 65: ? 66: ? 67: if (condiction == "業內新聞") 68: { 69: sql = "select top " + nums + " id,title,time,ArticleHtmlUrl from news order by time desc"; 70: DataTable dt = cs.GetDataSet(sql).Tables[0]; 71: //if (dt.Rows.Count == 0) 72: //{ 73: // content.Append("<li><a href='#'>#</a><span class='time'>[##-##-##]</span></li>"); 74: //} 75: for (int i = 0; i < dt.Rows.Count; i++) 76: { 77: ? 78: title = GetTile(dt.Rows[i]["title"].ToString()); 79: ? 80: id = dt.Rows[i]["id"].ToString(); 81: ? 82: time = ((DateTime)dt.Rows[i]["time"]).Date.ToShortDateString(); 83: ? 84: ArticleHtmlUrl = dt.Rows[i]["ArticleHtmlUrl"].ToString(); 85: ? 86: content.Append("<li><a href='NewsContent.aspx?id="+id+"'>" + title + "</a><span class='time'>[" + time + "]</span></li>"); 87: ? 88: } 89: Response.Write(content.ToString()); 90: ? 91: return; 92: ? 93: } 94: if (condiction == "工藝知識") 95: { 96: ? 97: sql = "select top " + nums + " id,title,time,ArticleHtmlUrl from craftknowledge order by time desc"; 98: ? 99: DataTable dt = cs.GetDataSet(sql).Tables[0]; 100: ? 101: //if (dt.Rows.Count == 0) 102: //{ 103: // content.Append("<li><a href='#'>#</a><span class='time'>[##-##-##]</span></li>"); 104: //} 105: for (int i = 0; i < dt.Rows.Count; i++) 106: { 107: ? 108: title = GetTile(dt.Rows[i]["title"].ToString()); 109: ? 110: id = dt.Rows[i]["id"].ToString(); 111: ? 112: time = ((DateTime)dt.Rows[i]["time"]).Date.ToShortDateString(); 113: ? 114: ArticleHtmlUrl = dt.Rows[i]["ArticleHtmlUrl"].ToString(); 115: ? 116: //Response.Write("<li><a href='craftknowledge_info.aspx?craft_id=" + id + "'>" + title + "</a><span class='time'>[" + time + "]</span></li>"); 117: ? 118: content.Append("<li><a href='craftknowledge_info.aspx?id=" + id + "'>" + title + "</a><span class='time'>[" + time + "]</span></li>"); 119: ? 120: } 121: Response.Write(content.ToString()); 122: return; 123: ? 124: } 125: ? 126: if (condiction == "企業展示") 127: { 128: sql = "select top " + nums + " hit, id,name from company where state='1' and state1='1' order by company.rank desc"; 129: ? 130: DataTable dt = cs.GetDataSet(sql).Tables[0]; 131: //if (dt.Rows.Count == 0) 132: //{ 133: // content.Append("<li><a href='#'>#</a></li>"); 134: //} 135: for (int i = 0; i < dt.Rows.Count; i++) 136: { 137: id = dt.Rows[i]["id"].ToString(); 138: ? 139: name = GetTile(dt.Rows[i]["name"].ToString()); 140: ? 141: ? 142: ? 143: content.Append("<li><a href='company_introduce.aspx?id=" + id + "'>" + name + "</a></li>"); 144: ? 145: } 146: Response.Write(content.ToString()); 147: return; 148: ? 149: } 150: }

這種UI和數據混合的方式,如果界面一修改,改動大了,經常性碰到,這個界面太囧了......然后改整個版面,為什么我們不把數據和UI隔離開來,后臺么?

只負責數據提供,通過JSON等傳輸,然后前臺js/JQuery操作界面呢?

這樣前臺就應該這樣,

1: <%@ Page Language="C#" MasterPageFile="~/InfoPage.master" AutoEventWireup="true" 2: CodeFile="MasterInfo.aspx.cs" Inherits="Master_MasterInfo" Title="大師信息" %> 3: ? 4: <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server"> 5: <link href="../css/gs_ms.css" rel="stylesheet" type="text/css" /> 6: ? 7: <script src="../Admin/scripts/jquery-1.7.1.min.js" type="text/javascript"></script> 8: ? 9: <script src="../js/queryUrlParams.js" type="text/javascript"></script> 10: ? 11: <script src="MasterInfo.js" type="text/javascript"></script> 12: ? 13: 14: <script type="text/javascript"> 15: //獲得大師id信息 16: var id=$.query.get("MasterId"); 17: </script> 18: ? 19: </asp:Content> 20: <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 21: <div class="ms"> 22: <div class="ms_top"> 23: <div class="m_load"> 24: <span><a href="../Default.aspx">首頁</a> > <a href="MasterList.aspx">大師風采</a> > 大師</span></div> 25: <div class="mst_c"> 26: <ul class="mst_ul"> 27: <li><a href="#" id="Master_Intro"> 28: <p class="hide"> 29: 大師簡介</p> 30: </a></li> 31: <li><a href="#" id="Master_Award"> 32: <p class="hide"> 33: 獲獎情況</p> 34: </a></li> 35: <li><a href="#" id="Master_Work"> 36: <p class="hide"> 37: 大師作品</p> 38: </a></li> 39: </ul> 40: <div class="mst_img"> 41: <img src="../images/master_img.png" id="imgMaster" /></div> 42: <div class="mst_xx"> 43: <table width="252" height="141" id="tbMasterInfo"> 44: </table> 45: </div> 46: </div> 47: </div> 48: <div class="gs_nr" id="MasterContent"> 49: 50: </div> 51: </div> 52: </asp:Content>

然后通過jquery操作,

1: 2: $(function(){ 3: GetMasterInfo(); 4: GetMasterIntro(); 5: //綁定獲取大師簡介事件 6: $("#Master_Intro").click(function(){ 7: GetMasterIntro(); 8: }); 9: $("#Master_Award").click(function(){ 10: GetMasterReward(); 11: }); 12: $("#Master_Work").click(function(){ 13: GetMasterWork(); 14: }); 15: }); 16: //獲取大師基本信息 17: function GetMasterInfo(){ 18: $.ajax({ 19: url:"Data/MasterInfo.ashx?method=GetMasterInfo&MasterId="+id, 20: type:"post", 21: success:function(text){ 22: var jsonData=$.parseJSON(text); 23: if(jsonData.Status){ 24: var item='<tr><td width="51"> 姓名:</td>'; 25: item+=' <td width="92">'+jsonData.Data[0].Name+'</td>'; 26: item+='<td width="47">性別: </td>'; 27: item+='<td width="42">'+jsonData.Data[0].Sex+'</td>'; 28: item+=' </tr>'; 29: item+='<tr> <td> 出生:</td>'; 30: item+='<td>'+jsonData.Data[0].Birthday+'</td>'; 31: item+='</tr>'; 32: item+=' <tr><td colspan="4">藝術家分類:'; 33: item+=jsonData.Data[0].TypeName; 34: item+='</td></tr>'; 35: 36: $("#tbMasterInfo").empty(); 37: $("#tbMasterInfo").append(item); 38: var src="../Admin/FileManage/GetImg.ashx?method=GetMasterPic&type=medium&fileName="+jsonData.Data[0].PicturePath; 39: $("#imgMaster").attr("src",src); 40: } 41: } 42: }); 43: 44: } 45: //獲取大師簡介信息 46: function GetMasterIntro(){ 47: $.ajax({ 48: url:"Data/MasterInfo.ashx?method=GetMasterIntro&MasterId="+id, 49: type:"post", 50: success:function(text){ 51: var jsonData=$.parseJSON(text); 52: if(jsonData.Status){ 53: var item='<h4>大師簡介</h4>'; 54: item+='<p>'+jsonData.Data[0].Introduction+'</p>'; 55: $("#MasterContent").empty(); 56: $("#MasterContent").append(item); 57: } 58: } 59: }); 60: } 61: //獲取大師榮譽信息 62: function GetMasterReward(){ 63: $.ajax({ 64: url:"Data/MasterInfo.ashx?method=GetMasterReward&MasterId="+id, 65: type:"post", 66: success:function(text){ 67: var jsonData=$.parseJSON(text); 68: var item='<h4>大師榮譽</h4>'; 69: if(jsonData.Status){ 70: item+='<ul class="gs_reward">'; 71: item+=' <li>'+jsonData.Data[0].Reward+'</li></ul>'; 72: item+=' <h4>獲獎情況</h4><ul class="gs_cup">'; 73: $.each(jsonData.Data[0].CertPicList,function(key,value){ 74: var img="../Admin/FileManage/GetImg.ashx?method=GetMasterCert&type=medium&fileName="+value.CertPic; 75: item+='<li><span class="c_pic_a">'; 76: item+='<img src='+img+' alt='+value.CertName+' title='+value.CertName+'/></span><span class="a_title">'+value.CertName+'</span>'; 77: item+='</li>'; 78: }); 79: item+='</ul>'; 80: 81: } 82: else{ 83: item+=' <h4>獲獎情況</h4>'; 84: } 85: $("#MasterContent").empty(); 86: $("#MasterContent").append(item); 87: } 88: }); 89: } 90: //獲取大師產品信息 91: function GetMasterWork(){ 92: $.ajax({ 93: url:"Data/MasterInfo.ashx?method=GetMasterWork&MasterId="+id, 94: type:"post", 95: success:function(text){ 96: var jsonData=$.parseJSON(text); 97: var item=''; 98: if(jsonData.Status){ 99: $.each(jsonData.Data,function(key,value){ 100: item+='<h4>'+value.TypeName+'</h4>'; 101: item+='<ul class="gs_pic">'; 102: $.each(value.Product,function(PKey,PValue){ 103: var img="../Admin/FileManage/GetImg.ashx?method=GetMainProductPic&type=medium&fileName="+PValue.Picturepath; 104: item+='<li>'; 105: item+='<a href="../Product/Product.aspx?ProductId='+PValue.ProductId+'" class="c_pic_a"><img src="'+img+'" alt="'+PValue.Name+'" title="'+PValue.SimpleName+'"/></a>'; 106: item+='<a href="../Product/Product.aspx?ProductId='+PValue.ProductId+'" class="a_title">'+PValue.SimpleName+'<br/><span class="rad2">¥'+PValue.Lsprice+'</span></a> '; 107: item+='</li>'; 108: }) 109: item+='</ul>'; 110: item+='<div style="text-align:right"><a href="../Product/Master_MoreProduct.aspx?MasterId=' + id + '&&TypeId=' + value.TypeId + '">more>></a></div>'; 111: 112: }) 113: 114: } 115: else{ 116: item+='沒有數據!'; 117: } 118: $("#MasterContent").empty(); 119: $("#MasterContent").append(item); 120: } 121: }); 122: } 123:

這樣不管怎么改界面,我們的數據是不變的,哈哈!

?

還有最最最重要的,我們的代碼規范,命名規范,我的所有代碼全部自己強制性要求自己必須遵

守,所以才能一目了然,清晰,嚴謹,易于維護和開發!

今天的三層就總結到這里!

還有項目中比較重要的一些東西,下次在總結!

轉載于:https://www.cnblogs.com/mysweet/archive/2012/05/07/2486771.html

總結

以上是生活随笔為你收集整理的一步一步asp.net_三层构架的学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产黄色美女 | 六月天色婷婷 | 日韩在线短视频 | 丁香六月网 | 在线黄色av | 国产精品99蜜臀久久不卡二区 | 草久草久 | 久久免费黄色网址 | a√资源在线 | 天天色天天干天天 | www.久久精品视频 | 色婷婷a | 婷婷色 亚洲 | 成片视频免费观看 | 国产精品青草综合久久久久99 | 中文字幕av一区二区三区四区 | 成人午夜久久 | 成人免费观看完整版电影 | mm1313亚洲精品国产 | 亚洲国产精品99久久久久久久久 | 国产精品一区二区在线播放 | 欧美综合在线视频 | 日韩在线中文字幕视频 | 成人一区在线观看 | 91久久国产露脸精品国产闺蜜 | 丁香综合五月 | 99久久综合狠狠综合久久 | 午夜三级福利 | 国产精品理论在线观看 | 99热这里精品 | 一本一本久久a久久 | 91色国产 | 日韩欧美国产精品 | 国产小视频国产精品 | 国产高清日韩欧美 | 九色琪琪久久综合网天天 | 91色在线观看 | 久久精品韩国 | av网站在线免费观看 | 亚洲精品美女久久久 | 久久噜噜少妇网站 | 久久天天躁狠狠躁夜夜不卡公司 | 国产精品福利小视频 | 国产一区二区在线免费视频 | 人人爽人人爽人人爽学生一级 | 国产精品一区二区在线播放 | 在线视频1卡二卡三卡 | 日本特黄一级片 | 不卡电影免费在线播放一区 | 精品一区二区6 | 亚洲自拍偷拍色图 | 亚洲女裸体 | 欧美嫩草影院 | 国产精品久久中文字幕 | 成年人免费av网站 | 久草在线视频国产 | 日日日视频 | 91成人精品一区在线播放69 | 欧美一级大片在线观看 | 97精品国产aⅴ | 日韩av午夜在线观看 | 超碰在线天天 | 久久精品毛片基地 | 91pony九色丨交换 | 久久久久国产精品视频 | 91丨精品丨蝌蚪丨白丝jk | 91.精品高清在线观看 | 在线免费观看av网站 | 国产伦理久久精品久久久久_ | 一色屋精品视频在线观看 | 97av色| 日日躁夜夜躁aaaaxxxx | 国产护士在线 | 国产精品成人一区二区三区 | 精品国产1区 | 国产精品第三页 | 久久综合之合合综合久久 | 欧美性生活大片 | 91av免费看| 国产精品男女啪啪 | 成人黄色毛片 | 美女久久久久久久 | 91麻豆精品国产午夜天堂 | 欧美精品一区二区性色 | 久久免费中文视频 | 久久蜜臀一区二区三区av | 亚洲播放一区 | 久久久天天操 | 免费成人黄色av | 在线观看免费国产小视频 | 亚洲一级在线观看 | 久久久久欠精品国产毛片国产毛生 | a天堂一码二码专区 | 国产亚洲精品成人 | 午夜久久影视 | 亚洲黄色免费电影 | 丁香五月亚洲综合在线 | 国产品久精国精产拍 | 99视频在线观看一区三区 | 9在线观看免费 | 亚洲精品小视频在线观看 | 天天射一射 | 国产精品成人品 | 久久久精品免费观看 | 亚洲在线网址 | 亚洲天堂网站视频 | 成人91在线| 色综合咪咪久久网 | 久久色亚洲 | av在线看片 | 久草观看视频 | 日韩精品无码一区二区三区 | 日韩中文免费视频 | 999久久 | 国产一区福利在线 | 亚洲视频久久久 | 亚洲精品视频在线看 | 亚洲视频一区二区三区在线观看 | 狠狠五月天 | 久草久| 青青河边草观看完整版高清 | 免费网站v | 91av资源网| 91视频免费播放 | 在线观看www91| 亚洲精品美女免费 | 亚洲黄色激情小说 | 人人干狠狠操 | av综合在线观看 | 精品一区二区综合 | 天天爱天天操天天射 | 色999视频 | 久久免费精品 | 中文字幕在线观看免费高清电影 | 午夜 在线 | 日日日操| 久久久久国产精品免费免费搜索 | 精品在线观看一区二区 | 久久亚洲综合国产精品99麻豆的功能介绍 | 最近最新中文字幕视频 | 久久这里 | 日韩欧美在线国产 | 亚洲激情网站免费观看 | 免费成人黄色av | 亚洲在线a | 日韩极品视频在线观看 | 麻豆视频免费入口 | 国产成人精品电影久久久 | 欧美一级小视频 | 日韩一区二区三区在线看 | 国产精品视频永久免费播放 | 中文字幕在线看 | 日韩电影久久久 | 91久久黄色 | 狠狠操导航 | 国产精品日韩在线观看 | 色福利网 | 91精品一区在线观看 | 黄a在线 | 黄色大片国产 | 伊人黄色网 | 在线免费观看国产黄色 | 五月婷婷在线播放 | 久久久久久久久久福利 | 久久99国产精品二区护士 | 亚洲精品午夜久久久久久久久久久 | 日日日日干 | 成人91在线观看 | 亚洲另类视频 | 日日夜夜天天干 | 性色xxxxhd | 免费一级片久久 | 中文字幕高清有码 | 干 操 插 | 天天综合网天天 | 国产夫妻性生活自拍 | 激情视频91 | 九九天堂| 91成人黄色| 人人干在线观看 | 国产资源免费在线观看 | 五月婷婷视频 | 国产在线观 | av网址在线播放 | 激情五月婷婷综合网 | 日韩国产高清在线 | 美女久久久久久久久久久 | 黄色国产区 | 免费看一级黄色 | 夜夜躁狠狠躁日日躁视频黑人 | 日韩精品一区二区三区丰满 | 亚洲成人黄色网址 | 日韩精品视频一二三 | 91免费的视频在线播放 | 在线日韩视频 | 亚洲天堂网视频在线观看 | 操夜夜操 | 婷婷新五月 | 99视频在线精品国自产拍免费观看 | 超碰资源在线 | 色瓜 | 免费av观看网站 | 久久综合九色综合欧美就去吻 | 婷婷色影院 | 久久综合免费视频影院 | 日本中文在线观看 | 免费成人av网站 | 日韩欧美第二页 | 日韩中文在线电影 | 综合伊人av| 亚洲天堂网站 | 日日爱av| av免费看av| 欧美精品一区二区三区四区在线 | 成人啪啪18免费游戏链接 | 综合激情网 | 久久国产免费视频 | 日韩福利在线观看 | 亚洲欧洲xxxx| 成年人在线电影 | 午夜视频二区 | 午夜av激情 | 精品999在线| 超碰在线日本 | 日韩r级电影在线观看 | 97超碰人 | 99在线精品免费视频九九视 | 97成人精品 | 亚洲电影av在线 | 久久香蕉电影网 | 国产在线视频不卡 | 手机看片久久 | 最近免费中文字幕mv在线视频3 | 91私密视频 | www黄com | 亚洲理论视频 | 黄色视屏免费在线观看 | 精品国产乱码久久久久久三级人 | 久久视频免费在线观看 | 久草| 国产亚洲在线观看 | 91视频在线免费观看 | 亚洲精品午夜久久久久久久 | 国产成人一区二 | 久久综合久久综合这里只有精品 | 欧美激情视频在线观看免费 | 久久99久久99免费视频 | 免费看片网址 | 久久有精品 | 欧美精品免费视频 | 久草视频在线资源 | 中文字幕文字幕一区二区 | 日本精品久久久一区二区三区 | 99在线精品免费视频九九视 | av成人在线观看 | 超碰在线94 | 麻豆免费精品视频 | 午夜电影中文字幕 | 国产一区免费 | 国产高清不卡在线 | 欧美日韩国产二区 | 国产高清在线精品 | 欧美视频在线观看免费网址 | 久久久在线免费观看 | 国产视频二 | 国产黄色片久久 | 伊人精品在线 | 日本中文在线 | 一区二区三区在线免费播放 | 免费视频区 | 国产精品久久久久久久7电影 | 91麻豆精品国产 | 免费观看性生活大片3 | 国产精品手机在线播放 | 九九热只有精品 | 久久国产电影 | 91视频免费看片 | 极品久久久 | 美女免费电影 | 97夜夜澡人人爽人人免费 | 亚洲丝袜一区 | 国产精品久久久久久久久久三级 | 精品xxx| 天无日天天操天天干 | 午夜精品久久久久久久久久久久 | aaaaaa毛片| 98超碰人人 | 天天爱天天草 | 成人综合免费 | 色小说av | 亚洲黄色免费 | 狠狠狠狠狠狠狠狠干 | 国产色区 | 91视频首页 | 日韩在线首页 | 亚洲jizzjizz日本少妇 | www黄| 日日夜夜骑 | 99久久精品国 | 久久久免费看片 | 97av在线| 91在线精品秘密一区二区 | 国产原创av在线 | 精品久久精品久久 | 天天操夜夜叫 | 亚洲 欧美 变态 国产 另类 | 欧美久久九九 | 91在线免费观看网站 | 欧美性生活一级片 | 天天干天天做 | 免费看国产曰批40分钟 | 国内精品久久久久影院男同志 | 黄色一级在线视频 | 欧美 日韩 性 | 婷婷5月色| 亚洲国产资源 | 麻豆精品视频在线观看免费 | 99久久精品午夜一区二区小说 | 毛片3 | 国产亚洲久一区二区 | 国产精品久久久久久久久久久久午 | 国产999精品久久久久久 | 国产又粗又猛又色又黄视频 | www.com久久| 四虎国产精品成人免费影视 | 中文字幕中文字幕中文字幕 | 福利区在线观看 | av福利在线导航 | 中文字幕久久久精品 | 在线观看av麻豆 | av导航福利| 99热.com| 久久精品视 | 久久免费视频一区 | 亚洲春色奇米影视 | 国产亚洲精品久久久久久网站 | 免费下载高清毛片 | 一本一本久久a久久精品综合妖精 | 91丨九色丨蝌蚪丨老版 | 国产69精品久久久久9999apgf | 免费久久99精品国产 | 国产人成一区二区三区影院 | 色婷婷激情综合 | 黄色.com | 欧美黑人性猛交 | 高清av在线 | 久久久久久久久毛片 | 国产成人综合精品 | 国产精品成人免费 | 91免费试看| 日韩美女黄色片 | 国产精品成久久久久 | 色www精品视频在线观看 | 九九99靖品| 亚洲一级免费电影 | 97精品国产91久久久久久 | 91色一区二区三区 | 成年人视频在线免费播放 | 亚洲狠狠婷婷综合久久久 | 国产精品视频永久免费播放 | 波多野结衣亚洲一区二区 | 免费在线激情视频 | 久久99精品国产麻豆婷婷 | 精品99在线观看 | 精品国产一区二区三区噜噜噜 | 欧美精品视| 人人干网站| 国产精品va | 国内免费久久久久久久久久久 | 日日天天 | 四虎最新入口 | 国产精品热视频 | 亚洲国产精品第一区二区 | 91精品1区| 一区二区三区av在线 | 国产护士av| 福利一区二区在线 | 99视频国产精品免费观看 | 2000xxx影视 | 国产亚洲在线 | 日韩免费电影 | 91麻豆精品国产91 | 韩国一区视频 | 在线观看你懂的网址 | av一区二区三区在线播放 | 国产在线播放观看 | 亚州天堂| 日韩av免费观看网站 | 久久不卡日韩美女 | 五月婷婷六月综合 | 91麻豆操 | 亚洲va欧美va| 亚洲黄色高清 | 国产高清视频免费在线观看 | 日韩91在线 | 中文字幕 国产精品 | 在线免费观看视频一区二区三区 | 97精品一区二区三区 | 人人射人人澡 | 狠狠干狠狠插 | 欧美三人交 | 日韩精品免费在线观看视频 | 久久一区国产 | 免费瑟瑟网站 | 亚洲综合国产精品 | 国产精品1区2区3区在线观看 | 综合激情 | 91精品视频在线观看免费 | 亚洲国产美女精品久久久久∴ | 伊人夜夜| 欧美日韩视频在线观看一区二区 | 久久99精品国产99久久 | 日韩精品欧美一区 | 国产精品毛片一区二区三区 | 黄色av电影 | 亚洲精品在线播放视频 | 日韩va欧美va亚洲va久久 | 久久国产精品电影 | 区一区二区三区中文字幕 | av在线网站免费观看 | 91在线视频在线观看 | 成人黄色大片在线观看 | 国产亚洲精品久久 | 久久久久久激情 | 天天干天天干天天干天天干天天干天天干 | 91免费高清 | 国产精品乱码一区二区视频 | 婷婷色网 | 人人爽人人爽人人爽 | 免费色视频网址 | 激情综合五月网 | 久久er99热精品一区二区三区 | 日韩精品久久久免费观看夜色 | av看片网 | 99视频国产精品 | 久久久久久久久久久电影 | 日本久久久久久科技有限公司 | 西西www4444大胆在线 | 日韩r级电影在线观看 | 国产日产精品一区二区三区四区的观看方式 | 麻豆传媒在线免费看 | 久久国产午夜精品理论片最新版本 | 精品在线小视频 | 超碰人人超 | 97超碰在线播放 | 97在线观看视频免费 | 麻豆免费在线视频 | 免费在线播放黄色 | 国产在线精品一区二区 | 久久免费视频7 | 亚洲高清视频在线观看免费 | 亚洲狠狠丁香婷婷综合久久久 | 久久久久伦理电影 | 欧美视频一区二 | 婷婷丁香激情五月 | 成人在线观看影院 | 亚洲国产成人av网 | 国产亚洲精品精品精品 | 最新一区二区三区 | 午夜10000| 最近中文字幕免费视频 | 欧美日韩国产二区 | 免费看片亚洲 | www.一区二区三区 | 欧美成人精品三级在线观看播放 | 国产日本亚洲 | 日韩欧美一区二区在线观看 | 天天操操| 欧美一区二区三区不卡 | 99欧美视频 | 欧美国产日韩激情 | .国产精品成人自产拍在线观看6 | 在线免费黄色毛片 | 国产成人综| 91三级视频| 97超碰超碰久久福利超碰 | 青草草在线视频 | 婷婷丁香激情 | 天天艹天天 | 激情视频一区二区三区 | 一级精品视频在线观看宜春院 | 92精品国产成人观看免费 | 一级黄色片网站 | 久久这里有 | 国产精品久久免费看 | 国产精品美女久久久久久久 | 丁香婷婷在线观看 | 久久精品女人毛片国产 | 日日干综合 | 麻豆91网站 | 婷婷国产视频 | 亚洲精品网站在线 | 精品久久久久久久久中文字幕 | 不卡电影免费在线播放一区 | 丁香六月欧美 | 天天干天天干天天色 | 人人模人人爽 | 亚洲婷婷丁香 | 久久亚洲精品电影 | 丁香高清视频在线看看 | 婷婷成人亚洲综合国产xv88 | 99精品欧美一区二区三区 | 超碰97人人干 | 国产成人免费观看久久久 | 在线免费国产视频 | 国产明星视频三级a三级点| 午夜视频在线观看网站 | 国产色黄网站 | 国产片免费在线观看视频 | 精品高清美女精品国产区 | 国产91免费在线 | 一本—道久久a久久精品蜜桃 | 久久久午夜精品福利内容 | 国产精品女 | 色综合久久久久网 | 国内免费的中文字幕 | 伊人影院在线观看 | 在线探花| 天天干天天搞天天射 | 伊人国产女 | 国产成人综合在线观看 | 国产尤物在线视频 | 伊人狠狠干 | 在线中文视频 | 日韩免费一区 | 日日夜夜精品视频天天综合网 | 亚洲欧美激情插 | 91av在线免费播放 | 婷婷在线综合 | 九九热在线观看视频 | 日韩免 | 91黄站| 波多野结衣综合网 | 涩涩网站在线看 | 99c视频高清免费观看 | 久久人人爽人人爽人人片av软件 | 99爱精品在线 | 日本韩国欧美在线观看 | 97精品伊人 | 国产精品成人自产拍在线观看 | 在线日韩中文 | 综合久久综合久久 | 黄色av网站在线观看免费 | 国产视频1 | 久久久五月婷婷 | 亚洲视屏在线播放 | 天堂va在线观看 | 久草精品电影 | 亚洲精品国久久99热 | 9在线观看免费高清完整版在线观看明 | 亚洲人成影院在线 | 操操操综合 | 成人av电影在线 | 一区二区三区在线观看免费 | 一级黄网 | 天天操人人要 | 69热国产视频 | 99re8这里有精品热视频免费 | 在线国产视频 | 欧美一级片免费播放 | 日日草av | 一区二精品 | 中文av日韩| 国产成人精品av在线观 | 国产色视频一区二区三区qq号 | 日本一区二区高清不卡 | 九色精品 | 精品v亚洲v欧美v高清v | 国内综合精品午夜久久资源 | 日韩毛片精品 | 天天天色综合 | 亚洲成成品网站 | av资源免费看 | 高清av在线免费观看 | av电影av在线 | 国产 欧美 日产久久 | 91精品在线观看视频 | 欧美视频国产视频 | 日本aa在线 | av在线播放一区二区三区 | 天天操天天干天天玩 | v片在线播放 | 美女久久久久久久 | 超碰97成人 | 骄小bbw搡bbbb揉bbbb | 91日韩精品一区 | 亚洲在线成人精品 | 五月激情婷婷丁香 | 久久国产剧场电影 | 日韩免费观看视频 | 能在线看的av | 国产精品一区在线观看 | 国产精品永久免费观看 | 免费观看视频黄 | 午夜精品一区二区三区可下载 | 国内免费的中文字幕 | 天天射综合 | 青青草国产精品视频 | 日韩欧美亚洲 | av在线成人 | 久久综合久色欧美综合狠狠 | 久久免费视频在线观看30 | 成人网在线免费视频 | 国产视频一区在线免费观看 | 国产日韩视频在线观看 | 日韩av成人在线观看 | 天天色天天干天天 | 久久激情视频免费观看 | 国产欧美中文字幕 | 久久人人射| 精品无人国产偷自产在线 | 成人在线免费小视频 | 久久综合狠狠狠色97 | 91av在线免费播放 | 久久在现 | 久久天天躁狠狠躁亚洲综合公司 | 欧美日韩中文视频 | 狠狠干天天操 | 国产又黄又猛又粗 | 在线高清 | 91日韩在线播放 | 日本精品久久久久影院 | 99久久婷婷国产精品综合 | 在线精品视频免费播放 | 日本成人中文字幕在线观看 | 黄色a大片| 欧美日本啪啪无遮挡网站 | 国产69精品久久久久久久久久 | 四虎在线免费观看视频 | 免费观看黄色12片一级视频 | 日日爽天天爽 | 中文字幕视频免费观看 | 日韩一区正在播放 | 国产日韩精品一区二区 | 日韩欧美一区二区在线播放 | 一区二区三区在线免费观看视频 | 热久久免费视频精品 | 日韩av图片 | 91最新地址永久入口 | 国产不卡一 | 一区二区三区在线影院 | 欧美网址在线观看 | 国产精品亚洲a | 精品视频免费看 | www.久久久.cum | 国产精品第三页 | 欧美日韩精品免费观看 | 婷婷激情综合 | 久久国产剧场电影 | 91成版人在线观看入口 | 日本成人免费在线观看 | 久久免费久久 | 麻豆视频大全 | www.色五月| 婷婷在线免费视频 | 香蕉视频免费看 | 天天综合操| 9在线观看免费高清完整 | 五月天激情视频 | 久久精品久久精品久久精品 | 久久久免费精品国产一区二区 | 久久国产电影院 | 免费av大片 | 欧美日韩99 | 日韩理论视频 | 一级做a爱片性色毛片www | 午夜精品三区 | 日韩精品一区二区三区电影 | 一区二区三区视频网站 | 999久久久欧美日韩黑人 | 日韩精品高清不卡 | 水蜜桃亚洲一二三四在线 | 国产在线一区观看 | 日韩在线观看中文字幕 | 午夜视频久久久 | 色噜噜色噜噜 | 黄色福利网站 | 免费观看91视频 | 免费看片成人 | 一二三四精品 | 免费色视频在线 | 亚洲专区在线播放 | 99热手机在线观看 | 99精品视频免费 | 97超级碰碰碰碰久久久久 | 狠狠精品 | 国产男女免费完整视频 | 粉嫩av一区二区三区入口 | 毛片激情永久免费 | 亚洲视频在线观看网站 | 久草在线最新免费 | 亚洲国产成人在线 | 在线视频日韩一区 | 成人h视频在线 | 欧美精品一区二区在线播放 | 亚洲精品午夜一区人人爽 | 亚洲精品国产高清 | 国产精品成人一区二区三区 | 最新av免费 | 久久久久黄 | 91av视频在线观看免费 | 黄色午夜| 天天综合网入口 | 91桃色免费视频 | 在线a亚洲视频播放在线观看 | 国产在线成人 | 亚洲最新视频在线播放 | 狠狠五月婷婷 | 久久久久久黄色 | 精品一区二区在线播放 | 涩涩网站在线 | 在线观看蜜桃视频 | 国产精品va在线观看入 | 日韩小视频 | 久久毛片网| 在线 日韩 av | 色婷婷99 | 久久久久国产免费免费 | 久久久一本精品99久久精品66 | 欧美污网站 | 337p日本欧洲亚洲大胆裸体艺术 | 在线欧美中文字幕 | 综合在线色 | 国产五月婷婷 | 三级av在线| 亚洲无吗视频在线 | 国产精品久久久影视 | 国产精品久久99精品毛片三a | 激情综合网色播五月 | 国产一区成人 | 国产精品123 | 日韩在线中文字幕视频 | 一区二区久久 | 久久久激情网 | 偷拍区另类综合在线 | 日日夜夜综合 | av中文在线| 人人澡澡人人 | 亚洲成人av免费 | 亚洲永久精品在线观看 | 五月天色中色 | 久久久久在线观看 | 激情婷婷六月 | 婷婷久久一区二区三区 | 亚洲aⅴ免费在线观看 | 中字幕视频在线永久在线观看免费 | 91亚洲激情 | 香蕉影视 | 999精品| 久久久精品 | 国产女教师精品久久av | 成人欧美一区二区三区在线观看 | 久久国内免费视频 | 国产精品99久久久久久大便 | 欧美精品一区二区免费 | 免费视频国产 | 韩国精品在线观看 | 欧美aa在线观看 | www九九热 | 国产成人av免费在线观看 | 久久九九精品 | 免费高清在线视频一区· | 一本色道久久精品 | 久久婷婷色 | 伊人久久一区 | 99久久婷婷国产精品综合 | 91麻豆精品国产91久久久使用方法 | 超碰在线成人 | 国产精品嫩草影视久久久 | 在线观看国产亚洲 | 人人舔人人舔 | 国产首页 | 欧美性极品xxxx娇小 | 亚洲精品视频在线观看免费视频 | 国产精品久久一区二区三区, | 国产97在线观看 | 日本超碰在线 | 欧美大片在线观看一区 | 国产一级免费片 | 麻豆视频免费入口 | 看毛片的网址 | 精品国产91亚洲一区二区三区www | 亚洲一级久久 | 97国产大学生情侣酒店的特点 | 黄色www| 中文字幕一二 | 免费观看xxxx9999片 | 国产又粗又猛又色 | 欧美作爱视频 | 精品国产黄色片 | 日本精品久久久久中文字幕5 | 日韩二区精品 | 精品国内自产拍在线观看视频 | 欧美日韩在线第一页 | 久久亚洲免费视频 | 亚洲国产经典视频 | 免费av福利 | 一区二区三区四区五区六区 | 国产91在线免费视频 | 国产夫妻av在线 | 国产一区欧美二区 | 国产精品va在线观看入 | 视频91在线| 国产剧情亚洲 | 精品毛片一区二区免费看 | 国产一区二区三区免费在线观看 | 国产黄色精品在线 | 91网在线看| 日本护士三级少妇三级999 | 亚洲国产精品成人女人久久 | 99精品视频播放 | 在线免费av网站 | 亚洲成av片人久久久 | 欧美日韩观看 | 国产精品一区二区麻豆 | 超碰久热| 日韩精品中文字幕在线 | 91精品国产网站 | www91在线| 午夜久久久久久久久久影院 | 黄色在线看网站 | 最新国产精品拍自在线播放 | wwwwwww黄 | 2019精品手机国产品在线 | 国产在线观看91 | 国产在线观看免费观看 | 91视频a | 五月婷婷综合在线观看 | 日韩三区在线观看 | 国产精品18久久久久久久网站 | 免费福利视频网 | 成人毛片一区二区三区 | 日韩欧美国产免费播放 | 精品一二区 | 成人黄色电影在线观看 | 999亚洲国产996395 | 欧美 日韩 成人 | 91在线看视频 | 91秒拍国产福利一区 | 中文字幕888| a在线v| 成人毛片一区 | 欧美精品久久久久久久免费 | 日韩在线网址 | 能在线看的av | 国产这里只有精品 | 黄色成品视频 | www夜夜操com| 激情偷乱人伦小说视频在线观看 | 麻豆久久久久久久 | 99久久婷婷国产精品综合 | 草久热| 国产网站在线免费观看 | 九九日九九操 | 亚洲精品视频第一页 | 国产在线精 | 九九九九九九精品 | 午夜私人影院 | 亚洲激情影院 | 中文字幕日韩在线播放 | av黄色在线 | 婷婷综合激情 | 欧洲黄色片 | 五月天婷婷免费视频 | 99精品视频播放 | 干干操操 | 香蕉看片 | 欧美日韩有码 | 999在线观看视频 | 亚洲小视频在线 | 少妇bbb好爽 | 亚洲夜夜网 | 久久久受www免费人成 | 久久人人爽人人爽人人 | 久久久午夜精品理论片中文字幕 | 日韩福利在线观看 | 色香蕉在线视频 | 亚洲欧美精品在线 | 草久久久久久 | 91av视频观看 | 久久国产热 | 在线观看黄色大片 | 亚洲精品视频观看 | 欧美日韩国产在线一区 | 久草在线资源观看 | 久久综合九色九九 | 亚洲欧美日韩中文在线 | 久久看看 | 国产中文字幕一区二区三区 | 中文字幕在线观看你懂的 | av福利第一导航 | 丁香六月婷婷激情 | 亚洲精品a区| 免费看污污视频的网站 | 国产成人av福利 | 亚洲精品网页 | 麻豆国产精品视频 | 亚洲理论电影网 | avsex| 久久精品1区 | 麻花豆传媒mv在线观看网站 | 青青河边草免费观看完整版高清 | 在线国产中文字幕 | 久久午夜网 | 99久久99久久精品国产片 | 欧美不卡视频在线 | 国产精品久久网站 | www.在线观看视频 | 国产精品18久久久久久久久久久久 | 国产精品久久一卡二卡 | 久久久久久久国产精品 | 久久不射网站 | 日本中文一级片 | 国产中文字幕在线播放 | 99免费在线观看 | 久久伊人免费视频 | 久久国产精品久久精品 | 91免费网站在线观看 | 精品一区二区免费在线观看 | 国产精品久久久久一区二区国产 | 中文字幕乱码日本亚洲一区二区 | 又黄又刺激的网站 | 国产综合精品久久 | 国产成人在线免费观看 | 91久久精 | www.五月婷婷.com | 中文字幕在线免费播放 | 少妇性bbb搡bbb爽爽爽欧美 | 免费三级a | 黄色av电影在线观看 | 黄av在线 | 免费观看91视频 | 久99久在线视频 | 欧美日韩国产mv | 亚洲激情视频 | 伊人干综合 | 国产一区二区三区免费在线 | 日韩黄色免费看 | 免费看国产曰批40分钟 | 国产高清在线免费视频 | 在线观看网站你懂的 | 91一区啪爱嗯打偷拍欧美 | 天天干天天射天天操 | 亚洲人xxx | 天天干天天干天天色 | 亚洲闷骚少妇在线观看网站 | 国产资源在线观看 | 五月天综合在线 | 爱干视频 | 午夜精品区 | 国产伦精品一区二区三区… | 国产福利a | 国产精品女同一区二区三区久久夜 | 成人性生交大片免费观看网站 | 国产一级片不卡 | 国产精品 日本 | 免费看久久久 | 91超碰在线播放 | 在线视频观看你懂的 | 国产精品尤物 | 国产精品嫩草影院123 | 黄色片网站av | 综合天天网 | 国产精品久久久久久久妇 | 亚洲精品毛片一级91精品 | 四虎影视成人永久免费观看视频 | av片免费播放 | 久久精品96| 黄色一级在线免费观看 | 久草在线一免费新视频 | 欧美成年人在线视频 | 特级黄色一级 | 日韩国产在线观看 | 激情五月色播五月 | 久久视频在线 | 欧美99精品 | 国产成人精品一区二区在线观看 | 国产成人在线观看免费 | 人人添人人澡人人澡人人人爽 | 久久五月天婷婷 | 久久一区91| 黄色在线免费观看网址 | 免费亚洲视频 | 狠狠色丁香婷婷综合久久片 | 嫩草av在线 | 中文字幕视频免费观看 | 黄色免费观看 | 欧美日韩精品影院 | 91福利视频免费观看 | 99热这里只有精品久久 | 三级性生活视频 | 永久免费毛片 | 日韩一片| 99热精品久久 | 在线成人免费 | 欧美日韩一级在线 | 粉嫩av一区二区三区四区在线观看 | 免费麻豆 |