精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产男女猛烈无遮挡| 成熟人妻av无码专区| 国产蜜臀av在线播放| 91美女蜜桃在线| 国产99视频精品免视看7| 国精产品一区一区| 亚洲图色一区二区三区| 色妞www精品视频| 亚洲精品偷拍视频| 亚洲欧美日本在线观看| 久久精品99国产精品日本| 久久久亚洲天堂| 免费看的黄色录像| 黄色欧美在线| 91超碰这里只有精品国产| 免费在线观看亚洲视频| 黄色免费在线观看| 久久嫩草精品久久久精品一| 91久久国产精品| 日韩免费av网站| 精品成人久久| www欧美日韩| 亚洲熟妇一区二区三区| 91久久精品无嫩草影院| 欧美日韩国产综合一区二区| 浮妇高潮喷白浆视频| 少女频道在线观看高清 | 欧美一级片在线免费观看| 美女18一级毛片一品久道久久综合| 亚洲日本在线看| 日韩视频专区| 日本一区二区三区在线观看视频| 国产精品一区二区在线观看网站| 国产精品白嫩初高中害羞小美女| 日本中文字幕网| 欧美 日韩 国产 一区| 中文字幕日韩综合av| 亚洲午夜福利在线观看| 欧美一级一片| 亚洲国产精品大全| 韩国三级hd两男一女| 日本一区二区三区播放| 在线不卡的av| 欧美wwwwwww| 国产精品xxx| 欧美午夜精品一区二区蜜桃| 草草草在线视频| 美女日韩欧美| 色老综合老女人久久久| 午夜精品久久久内射近拍高清| 99thz桃花论族在线播放| 亚洲一卡二卡三卡四卡五卡| 亚洲色婷婷久久精品av蜜桃| 在线中文字幕电影| 亚洲精品国产无套在线观| 国产美女视频免费| av大全在线| 亚洲国产欧美日韩另类综合| 18黄暴禁片在线观看| www.九色在线| 欧美日韩亚洲国产一区| 漂亮人妻被中出中文字幕| 中文字幕在线看片| 欧美性猛交xxxx富婆弯腰| 日本免费一级视频| 吞精囗交69激情欧美| 在线免费亚洲电影| 亚洲人视频在线| 国产在线一区不卡| 精品国产露脸精彩对白| 国产又粗又猛又色| 久久不卡国产精品一区二区 | 欧洲视频一区二区| 亚洲美女性囗交| 日韩精品一区国产| 亚洲成av人影院在线观看| 右手影院亚洲欧美| 色综合咪咪久久网| 欧美高清视频在线| 午夜婷婷在线观看| 久久精品国产99国产| 成人三级在线| 国产中文字幕在线看| 国产精品白丝在线| 国产成a人亚洲精v品在线观看| 精品捆绑调教一区二区三区| 欧美自拍丝袜亚洲| 日本中文字幕有码| 亚洲精品亚洲人成在线观看| 中文字幕在线看视频国产欧美| 污软件在线观看| 99热精品在线| 国产有码在线一区二区视频| 丁香六月色婷婷| 国产欧美一区二区三区在线看蜜臀 | 国产日韩在线免费| 亚洲精品国偷拍自产在线观看蜜桃| aaa亚洲精品| 婷婷精品国产一区二区三区日韩| 麻豆视频在线观看免费| 婷婷夜色潮精品综合在线| 青青青在线播放| 日韩视频1区| 中文字幕av一区| 国产精久久久久久| 久久激情五月激情| 欧美成人在线免费观看| 在线黄色网页| 欧美主播一区二区三区美女| 色哟哟视频在线| 国产二区精品| 国产成人精品日本亚洲| 亚洲产国偷v产偷v自拍涩爱| 国产精品天干天干在观线| 国产精品999视频| 欧美午夜网站| 色黄久久久久久| 亚洲欧美综合自拍| 成人妖精视频yjsp地址| 亚洲 欧洲 日韩| 成人在线黄色| 日韩高清有码在线| 国产无码精品视频| 国产精品99久久久久久有的能看 | 99精品视频免费全部在线| 亚洲tv在线观看| 888av在线| 欧美性欧美巨大黑白大战| 97人妻精品一区二区三区免 | 欧美一区二区三区激情| 亚洲乱码中文字幕| 天堂中文av在线| 成人动漫免费在线观看| 日本高清久久天堂| 四虎精品在线| 狠狠干狠狠久久| 毛茸茸free性熟hd| 激情偷拍久久| 国产精品久久久久久免费观看| 免费av网站在线看| 欧美高清视频不卡网| 美女100%露胸无遮挡| 久久伊人亚洲| 任我爽在线视频精品一| 伊人色综合一区二区三区影院视频| 亚洲国产成人久久综合一区| 久久无码精品丰满人妻| 国产精品伊人色| 香港三级日本三级a视频| 国模私拍国内精品国内av| 亚洲新中文字幕| 国产乱码在线观看| 中文字幕第一区| 五月婷婷之婷婷| 亚洲精彩视频| 91福利入口| 国内老司机av在线| 精品无码久久久久久国产| 久久久久久少妇| 久久久久久久综合| 天天干天天干天天干天天干天天干| 狠狠色丁香婷婷综合影院| 国产精品美女网站| 美女隐私在线观看| 欧美一区二区大片| 国产精彩视频在线| 久久久99久久精品欧美| 人人干人人干人人| 亚洲精品99| 激情一区二区三区| 欧美黄色三级| 久久精品男人天堂| 欧美熟女一区二区| 色美美综合视频| 中文字幕美女视频| 成人精品免费视频| 黄色国产小视频| 久久久久久影院| 国语精品免费视频| 91国拍精品国产粉嫩亚洲一区| 日韩在线视频网站| 懂色av一区二区三区四区| 一本到三区不卡视频| 蜜桃av免费观看| 国产91精品入口| 国产极品美女高潮无套久久久| 色综合天天爱| 国产精品亚洲不卡a| 日韩免费小视频| 欧美成人手机在线| 免费在线稳定资源站| 在线不卡a资源高清| 国产香蕉视频在线| 国产精品久久99| 男女性杂交内射妇女bbwxz| 人人超碰91尤物精品国产| 国产av熟女一区二区三区| 国产九一精品| 国产高清自拍一区| 精品美女一区| 欧美亚洲视频一区二区| 国产黄色在线观看| 亚洲美女激情视频| 精品区在线观看| 欧美视频中文一区二区三区在线观看| 久久免费黄色网址| 国产精品国产三级国产普通话三级 | 日本熟妇一区二区| 中文字幕一区在线观看| 国产吞精囗交久久久| 国产成人精品亚洲日本在线桃色| 麻豆av免费在线| 影音先锋亚洲精品| 亚洲天堂第一区| 色135综合网| 欧美精品免费观看二区| 亚洲专区**| 成人日韩av在线| 在线一区视频观看| 日本高清久久天堂| 男人的天堂免费在线视频| 欧美美女15p| 国产盗摄在线观看| 日日噜噜噜夜夜爽亚洲精品| 可以在线观看的黄色| 日韩成人免费视频| 手机在线观看毛片| 亚洲第一区第一页| 亚洲精品综合网| 日韩一区二区三区电影在线观看| 色婷婷久久综合中文久久蜜桃av| 欧美特级www| 久久夜靖品2区| 午夜在线成人av| 精品一区在线视频| 一二三四区精品视频| 97成人资源站| 亚洲男女一区二区三区| 国产精品精品软件男同| 国产精品电影院| 中文字幕乱码av| 中文字幕一区二区三区在线不卡| 亚洲色图 激情小说| 欧美国产国产综合| 91禁男男在线观看| 中文字幕一区二区在线播放| 男女全黄做爰文章| 中文字幕综合网| 国产精品三区在线观看| 亚洲精品少妇30p| 免费一级肉体全黄毛片| 亚洲尤物在线视频观看| 国产成人精品av久久| 亚洲成人综合网站| 日韩精品在线观看免费| 色婷婷久久综合| 中文字幕乱码人妻二区三区| 欧美三级电影网站| 国产乱码久久久久| 日韩精品专区在线| 少妇一级淫片免费看| 亚洲人成网站在线播| 午夜视频在线观看免费视频| 久久久精品在线| 欧美6一10sex性hd| 57pao精品| 成人免费一区| 亚洲xxx自由成熟| 九九热播视频在线精品6| 免费精品视频一区| 日韩精品免费| 欧洲精品在线播放| 日韩在线一区二区三区| 亚洲免费成人在线视频| 成人免费高清在线| 欧美做受高潮6| 亚洲乱码国产乱码精品精的特点| 男人天堂中文字幕| 欧美日韩国产一区中文午夜| 欧美一级视频免费观看| 欧美这里有精品| 丰满熟妇乱又伦| 亚洲色图综合网| 亚洲色图美国十次| 日本精品一区二区三区在线播放视频 | 福利一区视频在线观看| 九九热最新视频| 日韩欧美亚洲国产另类| 国产中文字幕在线视频| 久久99精品久久久久久琪琪| 亚洲最大成人| 亚洲最大成人网色| 久久99精品久久久久久园产越南| 亚洲一区二区免费视频软件合集| 狠狠干综合网| 国产又大又黄又猛| 成人av免费在线播放| а天堂中文在线资源| 精品久久久久久中文字幕一区奶水 | 国产精品第56页| 欧美日韩在线三级| 天天干免费视频| 久久久国产精品一区| 二区三区不卡| 国产精品免费观看高清| 9999国产精品| 一本色道无码道dvd在线观看| 国产精品亚洲成人| 99久久99久久精品免费| 欧美日韩免费看| 亚洲av无码一区二区乱子伦| 中文亚洲视频在线| 国产高清不卡| 国产一区精品在线| 国产精品激情| 成人不卡免费视频| 国产欧美精品区一区二区三区| 日本一级黄色录像| 日韩三级高清在线| 国产在线观看免费麻豆| 国产精品直播网红| 欧洲激情视频| 欧美日韩国产精品激情在线播放| 福利电影一区二区| 欧美日韩人妻精品一区二区三区| 欧美综合天天夜夜久久| 久青草国产在线| 26uuu亚洲伊人春色| 欧美日韩另类图片| 你真棒插曲来救救我在线观看| 国产精品中文欧美| 午夜精品福利在线视频| 3d动漫精品啪啪| 九七久久人人| 亚洲aaaaaa| 亚洲一区二区三区| 久久久久xxxx| 自拍偷拍国产亚洲| 国产www视频| 欧美人在线视频| 亚洲精品在线a| 丁香六月激情网| 成人精品国产一区二区4080| 久久精品国产亚洲AV无码麻豆 | 国产精品v亚洲精品v日韩精品| 精品国产鲁一鲁一区二区三区| 亚洲欧洲www| 精品国产亚洲AV| 欧美激情第一页xxx| 第四色在线一区二区| 国产精品无码免费专区午夜| 国产精品18久久久久久久久 | 欧美精品视频www在线观看| 日本中文字幕在线观看| 成人av电影天堂| 欧美影院一区| japanese在线观看| 日韩欧美在线网址| 国产三级在线观看| 国产欧美在线观看| 欧美女人交a| 美女黄色一级视频| 一本久道中文字幕精品亚洲嫩| 国产一级在线| 成人激情视频在线观看| 国内一区二区三区| 噜噜噜在线视频| 欧美日韩亚洲丝袜制服| a级在线观看| 久久久亚洲综合网站| 麻豆91在线播放| 免费一级全黄少妇性色生活片| 日韩av中文字幕在线播放| 免费看av不卡| 精品日韩在线播放| 99在线精品一区二区三区| 区一区二在线观看| 久久久精品日本| 欧美激情99| 国产一二三区av| 亚洲午夜免费电影| 国产精品麻豆一区二区三区| 成人在线播放av| 国产亚洲一区在线| 182在线观看视频| 精品视频久久久久久| 97精品资源在线观看| 中文字幕日本最新乱码视频| 国产精品成人免费精品自在线观看| 亚洲欧美激情国产综合久久久| 日本一区二区在线播放| 亚洲最大黄网| 亚洲天堂视频一区| 日韩视频在线永久播放| 台湾佬成人网| h无码动漫在线观看| 国产精品成人免费精品自在线观看| 欧美自拍偷拍第一页| 国产日韩欧美在线观看| 一本一本久久|