精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用Visual Studio 2010和MVC 2.0增強驗證功能

開發 后端
本篇文章主要關注使用DataAnnotations來對model進行驗證,同時會對最新版本特性進行簡單的接觸,以及如何使用Visual Studio 2010和MVC 2.0增強驗證功能。

在開始之前,我不得不說明我已經安裝了Visual Studio 2010 RC1,并使用它將老版本轉換為ASP.Net 4.0,大多數情況下,當你接收到來自用戶從form表單post來的信息后,你的驗證代碼往往會檢查相應的值是否存在,數據類型是否正確以及數據的范圍是否正確。

如果將驗證代碼放到一個集中的地方時,那類似上面所說的改變會不會變得更簡單些?Model中的DataAnnotations正是為此而來,在MVC 2.0中,這一特性被包含在內。

DataAnnotations作為.net Framework的一部分已經有一段時間了,但是MVC 2.0中增加了ModelMetaData類,這是儲存MetaData的容器,默認會使用同樣也是新增類的DataAnnotationsMetaDataProvider類。因為傳入的值會由Action方法接受model binding作為匹配傳入參數和action的參數而介入。

在MVC 2.0中,默認的model binder使用DataAnnotationsMetaDataProvider來獲取metadata中model binder嘗試匹配的對象,如果驗證用的metadata存在,則其會通過對對象的屬性和傳入的值比較來進驗證,這類meta由你通過使用標簽(Attribute)修飾屬性來實現。

下面例子中我通過原程序中添加聯系人這一過程來描述使用DataAnnotatioins的方法,這里我們使用自定義ViewModel,名為:ContactPersonViewModel。通過Contact.Add()這個action方法來添加聯系人,代碼如下:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Web.Mvc;  
  4. using System.ComponentModel;  
  5.  
  6. namespace ContactManagerMVC.Views.ViewModels  
  7. {  
  8.   public class ContactPersonViewModel  
  9.   {  
  10.     public int Id { get; set; }  
  11.     public string FirstName { get; set; }  
  12.     public string MiddleName { get; set; }  
  13.     public string LastName { get; set; }  
  14.     public DateTime DateOfBirth { get; set; }  
  15.     public IEnumerable<SelectListItem> Type { get; set; }  
  16.   }  
  17. }  

下面,我在為屬性添加一些標簽(Attribute):

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Web.Mvc;  
  4. using System.ComponentModel.DataAnnotations;  
  5. using ContactManagerMVC.Attributes;  
  6. using System.ComponentModel;  
  7.  
  8. namespace ContactManagerMVC.Views.ViewModels  
  9. {  
  10.   public class ContactPersonViewModel  
  11.   {  
  12.     public int Id { get; set; }  
  13.     [Required(ErrorMessage = "Please provide a First Name!")]  
  14.     [StringLength(25, ErrorMessage = "First name must be less than 25 characters!")]  
  15.     [DisplayName("First Name")]  
  16.     public string FirstName { get; set; }  
  17.  
  18.     [DisplayName("Middle Name")]  
  19.     public string MiddleName { get; set; }  
  20.  
  21.     [Required(ErrorMessage = "Please provide a Last Name!")]  
  22.     [StringLength(25, ErrorMessage = "Last name must be less than 25 characters!")]  
  23.     [DisplayName("Last Name")]  
  24.     public string LastName { get; set; }  
  25.  
  26.     [Required(ErrorMessage = "You must provide a Date Of Birth!")]  
  27.     [BeforeTodaysDate(ErrorMessage = "You can't add someone who hasn't been born yet!")]  
  28.     [DisplayName("Date Of Birth")]  
  29.     public DateTime? DateOfBirth { get; set; }  
  30.  
  31.     public IEnumerable<SelectListItem> Type { get; set; }  
  32.   }  
  33. }  

上面標簽的絕大多數標簽都是在System.ComponentModel.Annotations命名空間內,只有RequiredAttribute標簽不在此命名空間內,這個標簽聲明此值必須是一個有效值,并且包含ErrorMessage屬性。這個屬性可以讓你傳入自定義錯誤信息。StringLengthAttribute標簽指定了屬性可以接受的最小值和***值范圍。當和RequiredAttribute標簽結合使用時,只需要設置可以接受的***值。DisplayNameAttribute用于設置屬性如何顯示。#p#

上面標簽中BeforeTodaysDateAttribute標簽并不是.net Framework所提供,這是一個自定義標簽,用于檢測日期是否比當前的日期要早,你可以看到ErrorMessage值被設置。這個標簽用于防止任何被添加到聯系人列表的聯系人還未出生,下面是這個標簽的代碼:

  1. using System.ComponentModel.DataAnnotations;  
  2. using System;  
  3.  
  4. namespace ContactManagerMVC.Attributes  
  5. {  
  6.   public class BeforeTodaysDateAttribute : ValidationAttribute  
  7.   {  
  8.     public override bool IsValid(object value)  
  9.     {  
  10. if (value == null)  
  11. {  
  12.   return true;  
  13. }  
  14. DateTime result;  
  15. if (DateTime.TryParse(value.ToString(), out result))  
  16. {  
  17.   if (result < DateTime.Now)  
  18.   {  
  19.     return true;  
  20.   }  
  21. }  
  22. return false;  
  23.     }  
  24.   }  
  25. }  

很簡單是吧,這個類繼承了ValidationAttribute并重寫了IsValid()虛方法,如果未提供值,或是值小于當前日期(DateTime.Now),則返回True.利用標簽(Attribute)的方式讓在一個集中的地方應用驗證規則變得簡單,現在,只要ContactPersonViewModel在程序中被用到了,則驗證規則同時也會被應用到。但現在DefaultModelBinder內的DataAnnotations被支持,下面來看新版本的Add Partial View:

  1. <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ContactPersonViewModel>" %> 
  2.  
  3. <script type="text/javascript"> 
  4.   $(function() {  
  5.   $('#DateOfBirth').datepicker({ dateFormat: 'yy/mm/dd' });  
  6.   });  
  7.   $('#save').click(function () {  
  8. $.ajax({  
  9.     type: "POST",  
  10.     url: $("#AddContact").attr('action'),  
  11.     data: $("#AddContact").serialize(),  
  12.     dataType: "text/plain",  
  13.     success: function (response) {  
  14.   if (response == "Saved") {  
  15. window.location = "/";   
  16.   }else {  
  17. $("#details").html(response);  
  18.   }  
  19.     }  
  20. });  
  21.   });  
  22. </script> 
  23.  
  24. <% using (Html.BeginForm("Add", "Contact", FormMethod.Post, new { id = "AddContact" }))  
  25.    {%> 
  26. <table> 
  27.   <tr> 
  28. <td class="LabelCell"><%= Html.LabelFor(m => m.FirstName)%> </td> 
  29. <td><%= Html.TextBox(m => m.FirstName)%>   
  30. <%= Html.ValidationMessageFor(m => m.FirstName)%></td>    
  31.   </tr> 
  32.   <tr> 
  33. <td class="LabelCell"><%= Html.LabelFor(m => m.MiddleName)%> </td> 
  34. <td><%= Html.TextBox(m => m.MiddleName)%></td>    
  35.   </tr> 
  36.   <tr> 
  37. <td class="LabelCell"><%= Html.LabelFor(m => m.LastName)%> </td> 
  38. <td><%= Html.TextBox(m => m.LastName)%>   
  39. <%= Html.ValidationMessageFor(m => m.LastName)%></td>    
  40.   </tr> 
  41.   <tr> 
  42. <td class="LabelCell"><%= Html.LabelFor(m => m.DateOfBirth)%> </td> 
  43. <td><%= Html.TextBox(m => m.DateOfBirth)%>   
  44. <%= Html.ValidationMessageFor(m => m.DateOfBirth)%></td>    
  45.   </tr> 
  46.   <tr> 
  47.     <td class="LabelCell"><%= Html.LabelFor(m => m.Type)%></td> 
  48.     <td><%= Html.DropDownList("Type")%> 
  49.     </td> 
  50.   </tr> 
  51.   <tr> 
  52.     <td class="LabelCell"></td> 
  53.     <td><input type="button" name="save" id="save" value="Save" /></td> 
  54.   </tr> 
  55. </table> 
  56. <% } %>  

可以看出,這里使用新的強類型Html Helper.對前面項目修改的兩處是利用了jQuery代碼。***處是添加聯系人的Partial View是通過AJax提交,如果驗證失敗,則添加的form會再次被顯示,如果驗證通過,新的聯系人被添加到列表中,頁面會刷新繼而顯示更新后包含新聯系人的列表。

由于下面幾種原因,原來的Action方法需要被修正。首先修改action方法使其接受ContactPersonViewModel而不是ContactPerson作為參數,這是因為相關的驗證規則應用于ContactPersonViewModel,如果不將參數類型改變,那model binder依然能將傳入的值和ContactPerson的屬性相匹配,但所有的驗證規則就不復存在了。第二個改變是檢查ModelState的IsValid屬性是否有效,否則整個驗證就變得毫無意義.

  1. [AcceptVerbs(HttpVerbs.Post)]  
  2. public ActionResult Add([Bind(Exclude = "Id, Type")]ContactPersonViewModel person)  
  3. {  
  4.  
  5.     if (ModelState.IsValid)  
  6.     {  
  7.   var p = new ContactPerson  
  8.   {  
  9. FirstName = person.FirstName,  
  10. MiddleName = person.MiddleName,  
  11. LastName = person.LastName,  
  12. Type = Request.Form["Type"].ParseEnum<PersonType>()  
  13.   };  
  14.   if (person.DateOfBirth != null)  
  15. p.DateOfBirth = (DateTime)person.DateOfBirth;  
  16.   ContactPersonManager.Save(p);  
  17.   return Content("Saved");  
  18.     }  
  19.     var personTypes = Enum.GetValues(typeof(PersonType))  
  20.     .Cast<PersonType>()  
  21.     .Select(p => new  
  22.     {  
  23.   ID = p,  
  24.   Name = p.ToString()  
  25.     });  
  26.     person.Type = new SelectList(personTypes, "ID", "Name");  
  27.     return PartialView(person);  
  28. }   
  29.  

在model綁定過程中,我去掉了id和Type屬性,因為在把聯系人添加到數據庫以前并不會存在id屬性,而去掉Type屬性是因為在ViewModel中它的類型是SelectList,但在BLL層中ContactPerson對象中卻是枚舉類型,如果ModelState的IsValid屬性為True(注:既驗證通過),則ViewModel的屬性會和ContactPerson對象的屬性進行匹配,如果IsValid不為True,數據會回傳到View中顯示驗證失敗的相關信息。

上面代碼中我們注意到了Request.Form[“Type”]這個string類型的ParseEnum<T>擴展方法,這也是為什么我去掉Type屬性,只有這樣它才會被轉換為適當的類型。擴展方法的原型(在我的Google Analytics 文中)如下:

  1. public static T ParseEnum<T>(this string token)  
  2. {  
  3.     return (T)Enum.Parse(typeof(T), token);  
  4. }  
  5.  
  6. edit  

這個action方法也是如此,除了對DateOfBirth進行編輯那部分:

  1. <tr> 
  2.   <td class="LabelCell"><%= Html.LabelFor(m => m.DateOfBirth)%> </td> 
  3.   <td><%= Html.EditorFor(m => m.DateOfBirth)%>   
  4. <%= Html.ValidationMessageFor(m => m.DateOfBirth)%></td>    
  5. </tr>  

這里我并沒有使用TextBoxFor<T>擴展方法,而是使用了EditorFor<T>方法,默認情況下,DateTime類型都以hh:mm:ss這樣的方式顯示,但我并不喜歡這種格式,所以我創建了一個格式化顯示時間日期的模板,在View/Shared目錄下,我添加了一個名為EditorTemplates(這也是MVC中應有命名方式,因為MVC會自動搜索這個位置)并在此目錄下添加一個名為DateTime的Partial View,這也是MVC的慣例,而DateTime.ascx的代碼如下:

  1. <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime?>" %> 
  2. <%= Html.TextBox("", Model.HasValue ? Model.Value.ToShortDateString() : string.Empty) %> 

雖然只有短短兩行代碼,但是可以讓時間日期如果為空時,什么都不顯示,而如果時間存在,則以ShortDate的格式顯示。

總結

本篇文章研究了ASP.Net MVC 2.0中利用DataAnnotations來進行驗證,現在這已經是.net framework的一部分。文中還簡單的接觸了新版本中的一些特性,包括強類型的HTML Helper以及模板。本篇文章的代碼使用Visual Studio 2010 RC1創建的,所以代碼不能在VWD和Visual Studio的環境中調試。

Visual Studio 2010 全球發布會

【編輯推薦】

  1. 升級Visual Studio 2010和.Net 4注意要點
  2. 專家揭秘Visual Basic 2010的十大新特性
  3. Visual Studio 2010 Ultimate中MSF過程模型設計
  4. Visual Studio 2010代碼編譯器特性分析
  5. 詳解Visual Studio 2010五大新特性
責任編輯:王曉東 來源: 博客園
相關推薦

2010-02-26 09:18:24

Visual Stud

2010-04-12 08:43:45

Visual Stud

2023-09-26 00:24:44

VisualStudio視圖

2009-04-23 14:05:28

Visual Stud歷史調試功能

2009-10-22 09:47:33

Visual Stud

2009-03-17 08:56:57

Visual StudVS2010C++

2010-09-25 08:50:00

Visual Stud

2009-12-02 09:43:38

Visual Stud

2009-08-21 13:29:20

Visual Stud

2009-08-26 09:26:04

Visual Stud

2009-11-19 10:55:33

Visual Stud

2009-11-10 13:43:37

Visual Stud

2010-03-16 14:32:16

Visual Stud

2009-12-01 19:12:41

Visual Stud

2009-12-02 10:44:30

Visual Stud

2010-04-15 08:40:00

UML建模Visual Stud

2009-11-19 09:59:47

Visual Stud

2009-03-10 10:21:05

災難恢復Restart Manvs

2010-02-04 09:17:26

Visual Stud

2010-07-12 16:40:39

Visual Stud
點贊
收藏

51CTO技術棧公眾號

午夜精品福利视频网站| 精品在线免费观看| 亚洲欧洲av一区二区| 午夜精品在线免费观看| 大片免费在线观看| av成人免费在线观看| 国产精品电影观看| 国产中文字幕免费| 欧美精品尤物在线观看| 日韩欧美www| 中文字幕国产传媒| av成人影院在线| 国产精品久久777777| 国产精品美女诱惑| 亚洲综合网av| 噜噜噜躁狠狠躁狠狠精品视频 | 欧美日韩国产综合视频| 久久99国内精品| 91av视频在线| 欧美日韩成人免费观看| 爽爽窝窝午夜精品一区二区| 欧美一区三区四区| 久久综合久久色| 国产美女福利在线观看| 亚洲欧洲精品成人久久奇米网| 久久大片网站| 国产成人无码www免费视频播放| 蜜臀av一级做a爰片久久| 2019最新中文字幕| 国产午夜久久久| 欧美大片一区| 日韩一区二区三区国产| 国产又粗又黄又猛| 天堂综合网久久| 欧美不卡视频一区| 亚洲激情在线看| 国产精品久久久久久久久免费高清 | 在线精品视频视频中文字幕| 污片免费在线观看| 欧美日韩中出| 制服丝袜一区二区三区| 亚洲欧美激情网| 性欧美videohd高精| 午夜成人免费视频| 国产96在线 | 亚洲| 欧美hdxxxx| 亚洲一区二区三区四区五区中文| av电影一区二区三区| 91在线导航| 欧美激情一区在线观看| 日韩欧美精品久久| 国产视频第一区| 国产欧美一区二区三区鸳鸯浴| 久久久久久九九九九| 婷婷丁香花五月天| 不卡一区二区三区四区| 国产综合 伊人色| 视频二区在线观看| 91丝袜呻吟高潮美腿白嫩在线观看| 国产超碰91| 欧美亚洲精品在线观看| 波多野结衣一区二区三区| 国产精品区一区| 亚州男人的天堂| 久久影院视频免费| 日韩免费电影一区二区| 永久免费在线观看视频| 中文字幕在线观看不卡| 波多野结衣激情| 欧美xxxx视频| 欧美性少妇18aaaa视频| 欧美日韩在线成人| 亚洲精品无播放器在线播放| 欧美一区二区性放荡片| 日韩少妇一区二区| 天天躁日日躁成人字幕aⅴ| 国产一区二区三区在线播放免费观看| 女人黄色一级片| 欧美一区综合| 7m第一福利500精品视频| 国产精品久久久久久久久夜色| 免费在线成人网| 成人免费视频网站| 欧美一级特黄aaaaaa大片在线观看| 久久这里只精品最新地址| 视频一区视频二区视频三区视频四区国产 | 欧美一级大片在线视频| 亚洲电影免费观看高清完整版在线观看| 中文字幕乱视频| 少妇一区二区视频| 久久视频免费观看| 精品无码m3u8在线观看| 天堂在线亚洲视频| 国产视频福利一区| 亚洲国产精彩视频| 欧美激情综合五月色丁香小说| 青青草原网站在线观看| 免费v片在线观看| 欧美久久久一区| 污污内射在线观看一区二区少妇| 欧美日韩亚洲在线观看| 久久久久久久久国产精品| 日韩精品成人免费观看视频| 国内精品伊人久久久久av一坑| 国内精品久久久久久久果冻传媒| av男人的天堂在线| 亚洲国产视频a| gai在线观看免费高清| 日韩深夜福利| 欧美乱妇40p| 中国老头性行为xxxx| 成人性生交大片免费| 午夜视频久久久| 爱啪视频在线观看视频免费| 欧美美女bb生活片| 成人免费网站黄| 欧美日本不卡| 国产欧美日韩精品在线观看| 五月婷婷六月激情| 一区二区三区在线观看欧美| 麻豆一区二区三区视频| 亚洲裸色大胆大尺寸艺术写真| 欧美精品手机在线| 亚洲午夜精品久久久| av电影在线观看一区| 中文字幕一区二区三区四区五区人| 中文在线最新版地址| 亚洲第一免费播放区| 日本在线一级片| 免费不卡在线视频| 欧美日韩亚洲一区二区三区在线观看| 日韩另类在线| 欧美一区二区三区免费在线看 | 亚洲精品一二三四区| 免费一级特黄录像| 国产毛片一区二区三区| 欧美中文字幕视频| 五月婷婷在线观看视频| 亚洲香肠在线观看| 91精品人妻一区二区三区蜜桃2| 久久国产成人午夜av影院宅| 国产精品96久久久久久又黄又硬 | 日韩视频在线免费观看| 国产美女www| 久久久99免费| aaaaaa亚洲| 国产成人精品免费视| 日本欧美一级片| 免费黄色片在线观看| 欧美视频中文在线看| 风间由美一二三区av片| 在线视频精品| 日本一区二区三区免费看| 裤袜国产欧美精品一区| 亚洲欧洲激情在线| 国产免费一级视频| 欧美激情中文字幕| 亚欧激情乱码久久久久久久久| 成人羞羞视频在线看网址| 国产精品久久久久久久久久久久久久 | 国产午夜福利在线播放| 国产伦精品一区二区三区免费优势| 欧美精品videossex性护士| 国产1区在线观看| 午夜精品一区二区三区三上悠亚| 免费a v网站| 一本色道88久久加勒比精品| 欧美一区二区三区精美影视 | 二区在线播放| 欧美精品一区二区高清在线观看| 91精品国产乱码在线观看| 久久久国产精华| 日本不卡一区二区在线观看| 国产精品videosex极品| 国产一区二区三区奇米久涩 | 97se国产在线视频| 麻豆视频在线观看免费网站黄| 亚洲欧美综合v| 国产精品一品二区三区的使用体验| 一区二区三区久久| 亚洲第一成人网站| 国产伦精品一区二区三区免费 | 免费欧美在线视频| 欧美xxxx吸乳| 蜜桃视频欧美| 91免费高清视频| 天堂√中文最新版在线| 中文字幕日韩av| 高h调教冰块play男男双性文| 色综合久久精品| 青青草原免费观看| 久久亚洲综合av| 91大神免费观看| 久久久久91| 久久手机在线视频| 日本高清免费电影一区| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 黄色片免费观看视频| 国产精品毛片高清在线完整版| www.啪啪.com| 久久精品国产色蜜蜜麻豆| 996这里只有精品| 欧美日韩一区二区三区视频播放| 成人蜜桃视频| 日韩美女在线| 日韩av电影手机在线| 中文字幕在线观看播放| 亚洲性视频网站| 亚洲第一色视频| 欧美唯美清纯偷拍| 日韩精品在线免费看| 中文字幕制服丝袜一区二区三区 | gogogo高清免费观看在线视频| 亚洲天堂成人| 一级日韩一区在线观看| 妖精一区二区三区精品视频| 成人欧美一区二区三区视频xxx| 香蕉成人影院| 97视频国产在线| 18+激情视频在线| 日韩视频在线免费| 成人在线播放视频| 亚洲开心激情网| 熟妇人妻中文av无码| 日韩一区二区三区四区五区六区| 中文字幕人妻丝袜乱一区三区 | 国产草草影院ccyycom| 91久久精品一区二区| 天天操天天干视频| 亚洲国产精品久久人人爱 | 中文乱码免费一区二区三区下载| 日本一区二区三区视频免费看| 日韩精品福利一区二区三区| 99在线观看视频网站| 精品国产亚洲一区二区三区大结局| 国产精品精品国产| 亚洲成av在线| 国产精品激情自拍| 素人啪啪色综合| 国产精品户外野外| 国产成人精品一区二区三区免费| 国产va免费精品高清在线观看| 波多野结衣久久精品| 欧美一级视频一区二区| 性感女国产在线| 国产成人高清激情视频在线观看 | 亚洲精品免费在线视频| **日韩最新| 18成人在线| 成人在线超碰| 国产一区二区三区色淫影院| 老牛影视av一区二区在线观看| 精品无人区一区二区三区| 欧美黄色录像| 日本成人三级| 成人综合久久| 国产精品亚洲天堂| 午夜日韩电影| 日本xxxxxxxxxx75| 国产情侣久久| 亚洲五月天综合| 久久99久久99小草精品免视看| 中文字幕一区二区三区四| 国产黄色成人av| 91精品小视频| 国产欧美精品一区| 国产精品 欧美激情| 亚洲一区在线看| 日本天堂网在线| 欧美视频日韩视频在线观看| 国产精品毛片一区二区在线看舒淇| 91精品欧美福利在线观看| 亚洲国产精品久久人人爱潘金莲| 日韩成人在线视频| 日本韩国精品一区二区| 中文字幕日本精品| 国产三线在线| 国产成人免费av电影| 91精品国产色综合久久不卡粉嫩| 97在线中文字幕| 宅男在线一区| 欧美日韩dvd| 久久激情久久| 深夜做爰性大片蜜桃| 99riav久久精品riav| 色www亚洲国产阿娇yao| 亚洲一区二区三区爽爽爽爽爽| 黄色一级视频免费看| 欧美丰满少妇xxxbbb| 无码国产色欲xxxx视频| www日韩中文字幕在线看| 成人免费高清观看| 国产精品亚洲第一区| 国产成人高清精品免费5388| 亚洲二区自拍| 日韩亚洲国产欧美| av噜噜在线观看| 久久久久久久久免费| 国产亚洲小视频| 欧美日韩不卡一区二区| 日本免费一区视频| 久久久999精品视频| 欧美日韩123区| 国产经典一区二区三区| 日韩片欧美片| 国产超级av在线| 国产不卡高清在线观看视频| 日本美女bbw| 欧美日韩精品在线播放| 国产ts人妖调教重口男| 中文字幕在线观看日韩| 涩涩视频在线| 国产精品视频在线免费观看| 97精品国产福利一区二区三区| 女人扒开屁股爽桶30分钟| 国产高清久久久| 日韩在线观看免| 欧洲视频一区二区| 日韩av免费观影| 国内精品美女av在线播放| 亚洲一区av| 亚洲视频在线二区| 天堂av在线一区| 人妻丰满熟妇av无码久久洗澡| 亚洲综合视频在线观看| 91资源在线视频| 色香阁99久久精品久久久| 亚洲承认视频| 欧美一区二区三区在线免费观看 | 亚洲无人区码一码二码三码| 日韩一区欧美一区| 伊人久久一区二区| 永久免费看mv网站入口亚洲| 欧美电影h版| 欧美日韩一区二 | 91麻豆精品国产91久久久平台| 国产精品亚洲a| 久久久三级国产网站| 国产小视频在线免费观看| 日韩精品极品在线观看| 欧美gv在线| 蜜桃在线一区二区三区精品| 日韩亚洲国产欧美| 精品少妇一区二区三区免费观| 精品久久久国产精品999| 欧美一区二区三区成人片在线| 久久久视频精品| 红杏视频成人| 国产91美女视频| 久久久综合视频| 无码人妻丰满熟妇区bbbbxxxx| 亚洲色图激情小说| 户外露出一区二区三区| 亚洲人成77777| 国产在线视视频有精品| 一区二区在线观看免费视频| 欧美tk丨vk视频| 69av成人| 欧美婷婷久久| 久久精品国产999大香线蕉| 999精品视频在线观看播放| 91精品国产手机| 91探花在线观看| 欧美日韩国产不卡在线看| 日韩av网站在线观看| 在线观看黄网址| 精品少妇一区二区三区在线视频| 97蜜桃久久| 日韩亚洲视频在线| 国产制服丝袜一区| 日本三级理论片| 超级白嫩亚洲国产第一| 亚洲伊人久久大香线蕉av| 亚洲黄色av| 一级黄色片大全| 欧美猛男男办公室激情| 大黄网站在线观看| 欧美一级爽aaaaa大片| 九九国产精品视频| 国产精品变态另类虐交| 亚洲性生活视频| 久久综合给合| av免费播放网址| 中文字幕视频一区| 农村少妇久久久久久久| 国产97在线播放| 欧美色一级片| 舐め犯し波多野结衣在线观看| 91精品午夜视频| 国产精品一区二区av影院萌芽| 在线播放 亚洲| 91网址在线看| 99热这里只有精品1| 日本精品视频在线观看| 伊人色**天天综合婷婷| 毛片网站免费观看| 欧美mv日韩mv| 日本国产亚洲| 免费在线激情视频| 亚洲激情第一区|