基礎ピックアップ---データ注釈と検証

20320 ワード

きそピックアップ
基礎拾遺------特性の詳細
基礎拾遺------webservice詳細
基礎拾遺------redis詳細
基礎拾遺------反射の詳細
基礎拾遺------依頼詳細
基礎拾遺------インタフェースの詳細
基礎拾遺------汎型詳細解
基礎ピックアップ---依存注入
基礎ピックアップ---データ注釈と検証
基礎ピックアップ---mongodb操作
基礎拾遺------RabbitMQ
基礎ピックアップ---CLR
ベースピックアップ----マルチスレッド
前言
実はこの知識点について、ずっと総括する必要はないと思っていましたが、新しく来た会社はkendo for aspを使っていました.Netmvcは、ページを自動的に初期化し、オブジェクト属性に基づく注釈と検証に基づいているので、時間を合計してみましょう.『asp.net mvc 5高度プログラミング』を参考に
注釈の使用の検証
データ注記は、一般的なネーミングスペースで定義する.ComponentModel.DataAnnotationsは、モデルのプロパティで使用する場合、フレームワークがクライアント検証をサポートするサーバ側検証機能を提供します.ネーミングスペースDataAnnotationsのワークショップでは、一般的な検証に使用できる4つの特性があります.
1.Required強調を空にすることはできません
[Required(ErrorMessage = "{0}    ")]
public Guid BID { get; set; }

2.StringLength制御フィールド長
 [StringLength(4000, MinimumLength = 1, ErrorMessage = "{0}   {2}-{1}  ")] 
 public String Enclosure { get; set; }

3.RegularExpression正規表現
[RegularExpression(@"^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+",ErrorMessage = "      ,    。")]        
public string Email { get; set; }

4.Range指定値タイプの範囲
[Range(35,44,ErrorMessage = "       ")]
 public int Age { get; set; }

5.Compare 2回の入力は一致しなければならない
[RegularExpression(@"^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+",ErrorMessage = "      ,    。")]        
public string Email { get; set; }
[Compare("Email ")]
public string Email2 { get; set; }

6.Remoteはmvcフレームワークがアプリケーションの名前空間systemである.web.mvcは、サーバ側の戻り関数を利用してクライアントの検証ロジックを実行できる追加の
[Remote("CheckUserName", "Admin")]
public string UserName { get; set; }
public JsonResult CheckUserName(string username)
{
 return Json(DateTime.Now.ToString(),JsonRequestBehavior.AllowGet);
}

注記の表示と編集
1.DisplayName表示名
  [DisplayName("  ( )")]
  public Decimal Money { get; set; }

2.ScaffoldColumnはHTMLの補助方法を隠すことができる
[ScaffoldColumn(false)]
public string UserName { get; set; }

注意:ScaffoldColumnは、ページ上で編集された属性を表示しないようにできますが、コミットされたFormにこの属性値がある場合、モデルバインドメカニズムはこの属性値をバインドします.
3.DisplayFormatプロパティの各種フォーマットを処理します.例えば日付、浮動小数点数など
[DisplayFormat(ApplyFormatInEditMode = true,DataFormatString = "{0:c}")]
public decimal Total { get; set; }

4.ReadOnly読み取り専用
        [DisplayName("    ")]
        [ReadOnly(true)]
        public string RememberTime { get; set; }

5.実行時に属性に関する特定の用途情報を提供します.
[Required(ErrorMessage = "      ")]
[DataType(DataType.Password)]
public string Password { get; set; }

カスタム認証属性
実はこの方法は特性を決めて検証することです.特性については前の文章に触れている.
次のように適用します.
 [SelectList("/Inspect/GetSite?all=0",
             HttpVerbs.Post,
             CascadeFrom = "SegmentID",
             DataValueField = "SiteID",
             DataTextField = "Name",
             Data = @"function(){
                        return { segmentId: $(""#SegmentID"").val() };
                    }",
             DataType = "DropDownList")]
        [Required(ErrorMessage = "{0}    ")]
        public Guid SiteID { get; set; }

具体的には
 
[AttributeUsage(AttributeTargets.Property, AllowMultiple=false, Inherited=true)]
    public class SelectListAttribute : Attribute, IMetadataAware
    {
        public SelectListAttribute(string remoteUrl, System.Web.Mvc.HttpVerbs httpVerbs = 1)
        {
            if (remoteUrl == null)
            {
                throw new ArgumentNullException("remoteUrl");
            }
            this.RemoteUrl = remoteUrl;
            this.HttpVerbs = httpVerbs;
            this.ServerFiltering = true;
        }
        
        public void OnMetadataCreated(ModelMetadata metadata)
        {
            if (metadata == null)
            {
                throw new ArgumentNullException("metadata");
            }
            IDictionary<string, string> dictionary = null;
            if (!string.IsNullOrEmpty(this.AdditionalValues))
            {
                try
                {
                    dictionary = this.AdditionalValues.FromJsonstring, string>>();
                }
                catch
                {
                    dictionary = new Dictionary<string, string>();
                }
                if ((dictionary != null) && (dictionary.Count > 0))
                {
                    foreach (KeyValuePair<string, string> pair in dictionary)
                    {
                        metadata.AdditionalValues[pair.Key] = pair.Value;
                    }
                }
            }
            metadata.AdditionalValues["RemoteUrl"] = this.RemoteUrl;
            metadata.AdditionalValues["Type"] = this.HttpVerbs;
            metadata.AdditionalValues["Data"] = this.Data;
            metadata.AdditionalValues["ServerFiltering"] = this.ServerFiltering;
            metadata.AdditionalValues["Events"] = this.ParseEvents(this.Events);
            metadata.AdditionalValues["CascadeFrom"] = this.CascadeFrom;
            metadata.AdditionalValues["Recursion"] = this.Recursion;
            metadata.AdditionalValues["Multiple"] = this.Multiple;
            metadata.AdditionalValues["DataTextField"] = this.DataTextField;
            metadata.AdditionalValues["DataValueField"] = this.DataValueField;
            metadata.DataTypeName = this.DataType;
        }
        
        private IDictionary<string, string> ParseEvents(string value)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(value))
                {
                    value = "{}";
                }
                return new Dictionary<string, string>(value.FromJsonstring, string>>(), StringComparer.OrdinalIgnoreCase);
            }
            catch
            {
                return new Dictionary<string, string>();
            }
        }
        
        public string AdditionalValues { get; set; }
        
        public string CascadeFrom { get; set; }
        
        public string Data { get; set; }
        
        public string DataTextField { get; set; }
        
        public string DataType { get; set; }
        
        public string DataValueField { get; set; }
        
        public string Events { get; set; }
        
        public System.Web.Mvc.HttpVerbs HttpVerbs { get; private set; }
        
        public bool Multiple { get; set; }
        
        public bool Recursion { get; set; }
        
        public string RemoteUrl { get; private set; }
        
        public bool ServerFiltering { get; set; }
    }

特性については以前の文章を参考にしてください.
作者:王延领
出典:http://wyl1924.cnblogs.com
本文の著作権は作者とブログ園に共有され、転載を歓迎するが、作者の同意を得ずにこの声明を保留し、文章のページの明らかな位置に原文のリンクを与えなければならない.