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

詳解ASP.NET MVC中屬性標記的通用擴展方法

開發 后端
本文將討論ASP.NET MVC驗證框架中關于屬性標記的通用擴展方法,希望對大家有所幫助。

本文將討論的是ASP.NET MVC中屬性標記的通用擴展方法,在這里我們也將更進一步的了解ASP.NET MVC的作用。希望大家能用好ASP.MVC。

#T#

之前寫過一篇文章《ASP.NET MVC中的驗證》,唯一的遺憾就是在使用Data Annotation Validators方式驗證的時候,如果數據庫是Entityframework等自動生成的文件,就沒有辦法使用擴展屬性標記進行標記。現在已經開始有了一些其它的ASP.NET MVC 驗證框架,使用上跟Data Annotation Validators差不太多,但是普遍有這樣的問題,如果數據庫是Entityframework生成的edm文件,沒有辦法進行擴展屬性標記。

今天在網上發現了另外一個 ASP.NET MVC 驗證框架---xVal框架,使用上跟Data Annotation Validators非常接近,也有類似的問題。

簡單介紹下,xVal是一個開源的ASP.NET MVC驗證框架,有關它的介紹,可以參考:《xVal - a validation framework for ASP.NET MVC》

xVal使用了MS-PL的開源協議 ,也就是說,它允許用戶看、修改和分發源代碼,而不論出自商業用途還是非商業用途,類似BSD許可證。

框架結構

 

xVal可以通過IRulesProvider接口,通過這個接口可以進行擴展,很明顯,它只擴展了Castle框架跟NHibernate框架,通過如下兩個程序集就可以看出來:

xVal.RulesProviders.CastleValidator.dllxVal.RulesProviders.NHibernateValidator.dll基本上可以得出結論:xVal沒有提供對Entityframework框架的擴展,還需要我們做擴展。

最終,網上的一片文章給了我提示,問題得到了解決,解決的思路就是建立一個伙伴類,這個伙伴類跟原來的類的結構定義是一樣的,在進行驗證的時候,不對edm文件中的類進行驗證,而是對伙伴類進行驗證。

這里就以xVal框架為例進行Demo演示吧。

首先我們建立一個類模擬Entityframework生成的edm文件中的類,類的定義代碼如下:

模擬EF中的User類

  1. public partial class User  
  2. {  
  3.     public string UserName { getset; }  
  4.     public string Password { getset; }  
  5.     public string Address { getset; }  
  6.     public string Telephone { getset; }  
  7.     public int Age { getset; }  
  8.     public string Email { get;set;}  

接下來我們建立一個伙伴類

伙伴類的代碼

  1. public class UserMetadata  
  2.     {  
  3.         [Required]  
  4.         [StringLength(10)]  
  5.  
  6.         public string UserName { getset; }  
  7.  
  8.         [Required]  
  9.         [StringLength(18)]  
  10.         [DataType(DataType.Password)]  
  11.         public string Password { getset; }  
  12.  
  13.         [Required]  
  14.         [StringLength(100)]  
  15.         public string Address { getset; }  
  16.  
  17.         [Required]  
  18.         [DataType(DataType.PhoneNumber)]  
  19.         public string Telephone { getset; }  
  20.  
  21.         [Required]  
  22.         [Range(1, 100)]  
  23.         public int Age { getset; }  
  24.  
  25.         [Required]  
  26.         [DataType(DataType.EmailAddress)]  
  27.         public string Email { getset; }  
  28.     }  

再接下來,我們使用partial關鍵字為User類進行擴展,擴展類的定義如下:

擴展類的定義

  1. [MetadataType(typeof(UserMetadata))]  
  2. public partial class User  
  3. {     

注意這段代碼:[MetadataType(typeof(UserMetadata))] 

為了方便大家閱讀,我把整體代碼貼出來,整體代碼如下:

整體代碼

  1. using System.ComponentModel.DataAnnotations;   
  2.  
  3. namespace MVCValidate.Models  
  4. {  
  5.     public partial class User  
  6.     {  
  7.         public string UserName { getset; }  
  8.         public string Password { getset; }  
  9.         public string Address { getset; }  
  10.         public string Telephone { getset; }  
  11.         public int Age { getset; }  
  12.         public string Email { get;set;}  
  13.     }  
  14.  
  15.     [MetadataType(typeof(UserMetadata))]  
  16.     public partial class User  
  17.     {   
  18.           
  19.     }  
  20.     public class UserMetadata  
  21.     {  
  22.         [Required]  
  23.         [StringLength(10)]  
  24.  
  25.         public string UserName { getset; }  
  26.  
  27.         [Required]  
  28.         [StringLength(18)]  
  29.         [DataType(DataType.Password)]  
  30.         public string Password { getset; }  
  31.  
  32.         [Required]  
  33.         [StringLength(100)]  
  34.         public string Address { getset; }  
  35.  
  36.         [Required]  
  37.         [DataType(DataType.PhoneNumber)]  
  38.         public string Telephone { getset; }  
  39.  
  40.         [Required]  
  41.         [Range(1, 100)]  
  42.         public int Age { getset; }  
  43.  
  44.         [Required]  
  45.         [DataType(DataType.EmailAddress)]  
  46.         public string Email { getset; }  
  47.     }  

接下來,我們要實現伙伴類跟原類的替換方法了,代碼如下所示:

DataAnnotationsValidationRunner類的代碼

  1. using System.Collections.Generic;  
  2. using System.ComponentModel;  
  3. using System.ComponentModel.DataAnnotations;  
  4. using System.Linq;  
  5. using xVal.ServerSide;  
  6.  
  7. namespace MVCValidate.Models  
  8. {  
  9.     internal static class DataAnnotationsValidationRunner  
  10.     {  
  11.         // TODO: DOES NOT SUPPORT METADATA TYPE  
  12.         ///// Warning: For some reason, DataTypeAttribute.IsValid() always returns "true", regardless of whether  
  13.         ///// it is actually valid. Need to improve this test runner to fix that.  
  14.         //public static IEnumerable<ErrorInfo> GetErrors(object instance)  
  15.         //{  
  16.         //    return from prop in TypeDescriptor.GetProperties(instance).Cast<PropertyDescriptor>()  
  17.         //           from attribute in prop.Attributes.OfType<ValidationAttribute>()  
  18.         //           where !attribute.IsValid(prop.GetValue(instance))  
  19.         //           select new ErrorInfo(prop.Name, attribute.FormatErrorMessage(string.Empty), instance);  
  20.         //}  
  21.  
  22.         /// <summary>  
  23.         /// Get any errors associated with the model also investigating any rules dictated by attached Metadata buddy classes.  
  24.         /// </summary>  
  25.         /// <param name="instance"></param>  
  26.         /// <returns></returns>  
  27.         public static IEnumerable<ErrorInfo> GetErrors(object instance)  
  28.         {  
  29. var metadataAttrib = instance.GetType().GetCustomAttributes(typeof(MetadataTypeAttribute), true)
  30. .OfType<MetadataTypeAttribute>().FirstOrDefault();  
  31.             var buddyClassOrModelClass = metadataAttrib != null ? metadataAttrib.MetadataClassType : instance.GetType();  
  32.             var buddyClassProperties = TypeDescriptor.GetProperties(buddyClassOrModelClass).Cast<PropertyDescriptor>();  
  33.             var modelClassProperties = TypeDescriptor.GetProperties(instance.GetType()).Cast<PropertyDescriptor>();  
  34.  
  35.             return from buddyProp in buddyClassProperties  
  36.                    join modelProp in modelClassProperties on buddyProp.Name equals modelProp.Name  
  37.                    from attribute in buddyProp.Attributes.OfType<ValidationAttribute>()  
  38.                    where !attribute.IsValid(modelProp.GetValue(instance))  
  39.                    select new ErrorInfo(buddyProp.Name, attribute.FormatErrorMessage(string.Empty), instance);  
  40.         }  
  41.     }  

完成以上的代碼以后,大部分工作就完成了,接下來,我們在Controller中編寫一個create方法,來模擬Create操作,代碼如下所示:

Controller層的代碼

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Web.Mvc;  
  6. using System.Web.Mvc.Ajax;  
  7.  
  8. using MVCValidate.Models;  
  9. using xVal.ServerSide;  
  10.  
  11. namespace MVCValidate.Controllers  
  12. {  
  13.     public class UserController : Controller  
  14.     {  
  15.         [AcceptVerbs(HttpVerbs.Post)]  
  16.         public ActionResult Create(User user)  
  17.         {  
  18.             var errors = DataAnnotationsValidationRunner.GetErrors(user);  
  19.             if (errors.Any())  
  20.             {  
  21.                 new RulesException(errors).AddModelStateErrors(ModelState,"user");  
  22.             }  
  23.  
  24.             return View();  
  25.         }  
  26.     }  

 接下來,編寫View層的代碼,比較簡單,我就直接貼出來了,代碼如下:

View層的代碼

  1. <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<MVCValidate.Models.User>" %> 
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  3. <html xmlns="http://www.w3.org/1999/xhtml" > 
  4. <head runat="server"> 
  5.     <title>Create</title> 
  6. </head> 
  7. <body> 
  8.     <%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %> 
  9.     <% using (Html.BeginForm()) {%> 
  10.  
  11.         <fieldset> 
  12.             <legend>Fields</legend> 
  13.             <p> 
  14.                 <label for="UserName">UserName:</label> 
  15.                 <%= Html.TextBox("user.UserName") %> 
  16.                 <%= Html.ValidationMessage("user.UserName")%> 
  17.             </p> 
  18.             <p> 
  19.                 <label for="Password">Password:</label> 
  20.                 <%= Html.TextBox("user.Password") %> 
  21.                 <%= Html.ValidationMessage("user.Password")%> 
  22.             </p> 
  23.             <p> 
  24.                 <label for="Address">Address:</label> 
  25.                 <%= Html.TextBox("user.Address")%> 
  26.                 <%= Html.ValidationMessage("user.Address")%> 
  27.             </p> 
  28.             <p> 
  29.                 <label for="Telephone">Telephone:</label> 
  30.                 <%= Html.TextBox("user.Telephone")%> 
  31.                 <%= Html.ValidationMessage("user.Telephone")%> 
  32.             </p> 
  33.             <p> 
  34.                 <label for="Age">Age:</label> 
  35.                 <%= Html.TextBox("user.Age")%> 
  36.                 <%= Html.ValidationMessage("user.Age")%> 
  37.             </p> 
  38.             <p> 
  39.                 <label for="Email">Email:</label> 
  40.                 <%= Html.TextBox("user.Email")%> 
  41.                 <%= Html.ValidationMessage("user.Email")%> 
  42.             </p> 
  43.             <p> 
  44.                 <input type="submit" value="Create" /> 
  45.             </p> 
  46.         </fieldset> 
  47.     <% } %> 
  48.     <div> 
  49.         <%=Html.ActionLink("Back to List", "Index") %> 
  50.     </div> 
  51. </body> 
  52. </html> 

最終的效果如下圖所示:

效果圖

ASP.NET MVC開源驗證框架非常的多,只是有相似問題的更多,有了這個通用的方法,就可以很容易對其他驗證框架進行擴展了。

原文標題:ASP.NET MVC驗證框架中關于屬性標記的通用擴展方法

鏈接:http://www.cnblogs.com/wlb/archive/2009/12/01/1614209.html

責任編輯:彭凡 來源: 博客園
相關推薦

2009-09-10 09:50:47

ASP.NET MVC

2009-11-12 09:18:40

ASP.NET MVC

2009-10-29 09:15:32

ASP.NET MVCDropDownLis

2009-07-22 09:11:02

Action方法ASP.NET MVC

2010-02-03 09:50:58

ASP.NET MVC

2011-04-14 09:19:22

ASP.NET MVC

2010-03-19 09:17:16

ASP.NET MVC

2010-01-18 09:25:33

ASP.NET MVC

2009-09-18 10:20:26

PRG數據驗證

2009-07-22 17:55:52

2009-08-04 17:30:23

cookieless屬ASP.NET

2009-07-22 13:16:04

MvcAjaxPaneASP.NET MVC

2009-10-19 15:14:48

aspx擴展

2009-07-31 12:43:59

ASP.NET MVC

2009-07-24 13:20:44

MVC框架ASP.NET

2009-07-22 09:36:54

使用UpdataModASP.NET MVC

2010-09-15 09:18:21

ASP.NET MVC

2009-02-17 09:22:14

ActionMVCASP.NET

2009-02-16 10:05:11

ActionMVCASP.NET

2009-09-11 09:18:17

ASP.NET MVC
點贊
收藏

51CTO技術棧公眾號

久久人人超碰精品| 国产日韩一区二区三区在线播放| 91精品一区二区三区久久久久久| 色婷婷综合成人| 在线观看中文av| bbw在线视频| 久久99热狠狠色一区二区| 久久精品国产欧美激情| 精品伦一区二区三区| 国产精品迅雷| 夜夜爽夜夜爽精品视频| 日本免费一区二区三区| 精品人妻少妇AV无码专区| 久久久久久网| 欧美激情免费观看| 四虎国产精品免费| 老司机2019福利精品视频导航| 综合激情成人伊人| 日本黑人久久| 西西人体44www大胆无码| 国产综合自拍| 日韩三级中文字幕| 成人在线观看黄| 黄网av在线| 国产成a人无v码亚洲福利| 日韩av成人在线观看| 九九视频在线观看| 色偷偷综合网| 亚洲人成网站777色婷婷| 亚洲av无码成人精品区| 91麻豆精品国产综合久久久| 91官网在线观看| 国产高清精品在线观看| av在线加勒比| 一区二区三区久久| 亚洲AV无码成人精品一区| 岛国大片在线观看| 久久久亚洲综合| 国产日产精品一区二区三区四区 | 欧美日韩影视| 北岛玲一区二区三区四区| 亚洲自拍偷拍区| 亚洲视频一区二区三区四区| 男女男精品网站| 国产成人综合亚洲| 91精品国产高清一区二区三密臀| 亚洲经典自拍| 亚洲91av视频| 成人毛片18女人毛片| 在线看片一区| 97精品国产97久久久久久免费 | 欧美午夜精品久久久久久久| av免费观看国产| 色操视频在线| 亚洲不卡在线观看| 免费一级特黄毛片| 国产传媒在线观看| 黄色成人在线免费| 各处沟厕大尺度偷拍女厕嘘嘘| 国产理论在线| 欧美日韩在线视频一区二区| 免费在线观看的av网站| 在线观看网站免费入口在线观看国内| 疯狂做受xxxx欧美肥白少妇| 欧美日韩二三区| 亚洲综合电影| 欧美亚洲动漫另类| 国产女同无遮挡互慰高潮91| 亚洲大胆人体大胆做受1| ...中文天堂在线一区| 国产免费色视频| av免费在线免费| 亚洲一级不卡视频| av动漫在线观看| 99蜜月精品久久91| 日韩亚洲欧美中文三级| xxxwww国产| 自拍亚洲一区| 日韩最新在线视频| 九九视频免费观看| 国产精品一区亚洲| 国产精品久久久久久亚洲影视 | 日韩精品一区二区三区swag| 岛国精品资源网站| 日韩理论在线| 色综合导航网站| 天天插天天操天天干| 日本欧美加勒比视频| 欧美日本在线视频中文字字幕| 激情综合五月网| 一本久道久久综合婷婷鲸鱼| 久久国产精彩视频| 日韩精品久久久久久久酒店| 秋霞成人午夜伦在线观看| 91在线观看免费高清| 日韩一级片免费看| 亚洲国产成人私人影院tom| 国产日产欧美一区二区| 麻豆网站免费在线观看| 欧美日韩在线播放三区| 人妻换人妻a片爽麻豆| 欧洲激情综合| 久久久久亚洲精品| 极品盗摄国产盗摄合集| 亚洲欧美日韩国产综合精品二区| 国产精品女主播| 色婷婷在线视频| 国产精品久久三| 日韩欧美精品一区二区| 亚洲淫性视频| 欧洲国内综合视频| 亚洲自拍偷拍精品| 99精品电影| 欧洲成人午夜免费大片| 国产特黄一级片| 国产亚洲成年网址在线观看| 97久久国产亚洲精品超碰热| www在线视频| 亚洲欧洲精品天堂一级 | 日本aa在线| 欧美私模裸体表演在线观看| 中文成人无字幕乱码精品区| 午夜日韩电影| 91免费版网站入口| 成年女人的天堂在线| 欧美日韩国产区| www.四虎精品| 欧美精品网站| 成人福利视频网| 91精品国产91久久久久游泳池| 欧美天天综合色影久久精品| 日本久久久久久久久久| 一区二区日韩欧美| 国产一区香蕉久久| 国产福利在线观看| 在线亚洲高清视频| 亚洲第一成人网站| 午夜在线视频观看日韩17c| 成人影片在线播放| 二区三区在线观看| 欧美丰满少妇xxxxx高潮对白 | 久久精品久久99| 成人网18免费网站| 国产精品久久久久久久久借妻 | 欧美精品久久久久久久| 国产夫绿帽单男3p精品视频| 亚洲视频狠狠干| 国产资源中文字幕| 中文字幕亚洲综合久久五月天色无吗''| 国产精品色婷婷视频| 天堂а√在线官网| 91精品国产福利| 欧美日韩午夜视频| 在线观看日韩av电影| av在线不卡观看| 女子免费在线观看视频www| 日韩女优av电影| 久久综合综合久久| 99热精品一区二区| 免费裸体美女网站| 欧美美乳视频| 国产精品一区二区在线| 免费高清完整在线观看| 欧美一区二区三区公司| 久久精品一区二区三| www.日韩大片| av观看免费在线| 欧美丝袜一区| 91成人理论电影| 国产夫妻在线播放| 亚洲天堂男人天堂女人天堂| 波多野结衣电影在线播放| 国产精品一二三在| 成人性生活视频免费看| 亚洲第一福利专区| 国产精品永久免费观看| a级影片在线| 亚洲国产天堂久久综合| 中文字幕免费高清网站| 成人欧美一区二区三区在线播放| 女人扒开双腿让男人捅 | 蜜乳av综合| 成人免费视频97| av小说在线播放| 国产亚洲视频在线| 国产aⅴ一区二区三区| 精品久久久久久久大神国产| 成人午夜免费影院| 成人性视频网站| 四季av一区二区| 影音先锋久久久| 午夜久久资源| 久久97久久97精品免视看秋霞| 国产精品www网站| 啦啦啦中文在线观看日本| 亚洲欧美日韩网| 国产日本精品视频| 色综合视频一区二区三区高清| 国产精成人品免费观看| 国产成人自拍网| 人妻无码视频一区二区三区| 欧美大片专区| 茄子视频成人在线观看| 99a精品视频在线观看| y97精品国产97久久久久久| 亚洲欧美高清视频| 欧美日韩一本到| av大片在线免费观看| 1000精品久久久久久久久| 短视频在线观看| 国产激情视频一区二区三区欧美 | 免费一级肉体全黄毛片| 国产片一区二区| 在线天堂www在线国语对白| 国产一区在线观看麻豆| 亚洲视频在线观看一区二区三区| 在线看片欧美| 日本一道在线观看| 成人羞羞网站入口| 欧美人xxxxx| 国产成人aa在线观看网站站| 亚洲va国产va天堂va久久| avav成人| 国产v综合ⅴ日韩v欧美大片| japanese色国产在线看视频| 久久香蕉国产线看观看av| 91麻豆一区二区| 91国偷自产一区二区三区观看| 在线观看亚洲天堂| 亚洲午夜久久久| 欧美成人精品一区二区免费看片| 国产精品乱人伦中文| 精品少妇人妻一区二区黑料社区| 波多野洁衣一区| 精品人妻在线视频| 国产福利精品导航| gogo亚洲国模私拍人体| 国精产品一区一区三区mba视频| 午夜免费看毛片| 久久成人18免费观看| www.99在线| 免费看精品久久片| 亚洲一二三区av| 奇米在线7777在线精品| 久久网站免费视频| 美女精品网站| www日韩视频| 日本女优在线视频一区二区| 99视频免费播放| 奇米色一区二区三区四区| 欧美精品成人网| 蜜臀久久久99精品久久久久久| 丰满少妇在线观看| 蜜臀va亚洲va欧美va天堂| 天天色综合社区| 韩国v欧美v亚洲v日本v| 一二三av在线| 福利91精品一区二区三区| 午夜剧场免费看| 91免费版在线| 亚洲国产日韩一区无码精品久久久| 国产欧美一区二区精品忘忧草| 亚洲女同二女同志奶水| 亚洲精品日产精品乱码不卡| 精品亚洲永久免费| 岛国av一区二区在线在线观看| 日本a级c片免费看三区| 欧美三级电影在线观看| 国产又黄又粗又长| 欧美性xxxx极品hd满灌| 日韩免费av网站| 欧美高清视频一二三区 | 亚洲男人的天堂在线播放| 久青青在线观看视频国产| 中文字幕日韩视频| 影音先锋男人资源在线| 97视频在线观看亚洲| 欧美日韩视频免费观看| 91精品视频在线| 欧美久久精品| 亚洲精品在线观看免费| 欧美日韩国产综合网| 91猫先生在线| 久草热8精品视频在线观看| 欧美图片自拍偷拍| 国产三级一区二区| 日本天堂中文字幕| 色综合天天综合| www.97超碰| 亚洲欧洲中文天堂| 欧美人与性动交α欧美精品图片| 国产91成人video| 国产一区一区| 免费亚洲精品视频| 欧美久久99| 一区二区三区国产免费| 国产麻豆精品在线| 日韩av在线看免费观看| 伊人夜夜躁av伊人久久| 久久久久亚洲视频| 欧美大片一区二区| 午夜视频成人| 欧美亚洲日本网站| 麻豆久久一区| 午夜视频久久久| 99国产成+人+综合+亚洲欧美| 色婷婷狠狠18| www亚洲一区| 久草国产在线观看| 欧美精品tushy高清| av在线中文| 2019亚洲男人天堂| av成人资源| 久久精品国产精品亚洲精品色| 美女精品在线观看| xxxx黄色片| 亚洲午夜三级在线| 国产三级三级在线观看| 国产一区二区欧美日韩| 美女露胸视频在线观看| 成人免费在线一区二区三区| 欧美3p视频| 亚洲 欧洲 日韩| 视频一区在线播放| 国产三级视频网站| 亚洲第一福利一区| 国产999久久久| 久久夜精品香蕉| 色综合一区二区日本韩国亚洲| 日韩精品av一区二区三区| 国产午夜精品一区二区三区欧美 | 国产自产一区二区| 久久夜色精品国产欧美乱| 国产精品久久久久久久久免费高清 | 国产肉体ⅹxxx137大胆| 国产美女一区二区三区| 一级性生活免费视频| 欧美日韩精品久久久| 国产乱码久久久| 最近2019中文字幕在线高清| 3d欧美精品动漫xxxx无尽| 欧美成人免费在线| 模特精品在线| 国产jk精品白丝av在线观看 | 欧美精品在线网站| 91丨精品丨国产| 六月婷婷激情网| 国产在线视频不卡二| 欧美激情图片小说| 日韩欧美色综合网站| 毛片在线导航| 久久久久高清| 首页国产欧美日韩丝袜| 在线不卡av电影| 欧美日韩午夜在线视频| av电影在线网| 成人在线免费观看视视频| 欧美国产三级| 男人的天堂免费| 亚洲午夜电影在线观看| 色一情一乱一乱一区91av| 欧美性受xxxx黑人猛交| 欧美一区三区| 免费黄色一级网站| 一区在线观看视频| 亚洲av综合色区无码一二三区| 久久青草福利网站| 伊甸园亚洲一区| 8x8x成人免费视频| 一级做a爱片久久| 色播色播色播色播色播在线| 国产成人avxxxxx在线看| 999久久久国产精品| 国产精品99久久久精品无码| 午夜欧美一区二区三区在线播放| 三级视频在线播放| 国产精品一区电影| 欧美三级免费| 久久久视频6r| 欧美一级免费大片| 小早川怜子影音先锋在线观看| 亚洲精品一区国产精品| 国产·精品毛片| 自拍偷拍18p| 日韩专区在线观看| 欧美成人午夜77777| 美女少妇一区二区| 亚洲福中文字幕伊人影院| 黄色在线小视频| 91九色在线观看| 日韩国产成人精品| 免费一级全黄少妇性色生活片| 日韩久久精品成人| crdy在线观看欧美| 777米奇影视第四色| 亚洲女人****多毛耸耸8| 黄色片在线看| 国产精品亚洲一区| 极品尤物av久久免费看| 国产成人无码av|