MVCのModelは、データの伝達者だけではありません

3742 ワード

Modelで使用する場合、以前に3階層アーキテクチャを書いたように使用する人が多く、Modelをデータの伝達者として使用します.
例えばよくある書き方
        public int Id { get; set; }

        public int RoleId { get; set; }

        public string Name { get; set; }

        public string Password { get; set; }
        
        public string NickName { get; set; }
       
        public string Avatar { get; set; }


        public string Email { get; set; }


        public string Phone { get; set; }


        public string Qq { get; set; }


        public DateTime AddTime { get; set; }
        

        public DateTime LastLoginTime { get; set; }


        public string LastLoginIp { get; set; }


        public bool IsLock { get; set; }
        
        public bool IsSuperUser { get; set; }

この書き方は最もよくありますが、私が見たコードジェネレータもこのように生成されています.多くの人がモデルをデータの伝達者、データの一時領域としています.
Modelはデータを検証するためにも使用できます.参照:using System.ComponentModel.DataAnnotations;スペース
[Display(Name = "ID")]
        public int Id { get; set; }
        [Required(ErrorMessage = "  ID    ")]
        [Display(Name = "  ID")]
        public int RoleId { get; set; }
        [Required(ErrorMessage = "       ")]
        [Display(Name = "   ")]
        public string Name { get; set; }
        [Required(ErrorMessage = "      ")]
        [Display(Name = "  ")]
        public string Password { get; set; }
        
        [Display(Name = "  ")]
        public string NickName { get; set; }
       
        [Display(Name = "  ")]
        [DataType(DataType.Text)]
        public string Avatar { get; set; }

        [Display(Name = "  ")]
        public string Email { get; set; }

        [Display(Name = "  ")]
        public string Phone { get; set; }

        [Display(Name = "QQ  ")]
        public string Qq { get; set; }

        [Display(Name = "    ")]
        public DateTime AddTime { get; set; }
        
        [Display(Name = "      ")]
        public DateTime LastLoginTime { get; set; }

        [Display(Name = "    IP")]
        public string LastLoginIp { get; set; }

        [Display(Name = "    ")]
        public bool IsLock { get; set; }
        
        [Display(Name = "       ")]
        public bool IsSuperUser { get; set; }

MVCを書いたことがある人はすべて知っていますが、デフォルトの項目にはこのような例があります.
しかし、多くの人がうまく使えないか、使えない.コントローラでは、モデルが検証に成功したかどうかを判断できます.IsValid.
しかし、これでは十分ではありません.一部のフィールドは検証する必要はありません.一部のフィールドは検証する必要があります.これでRemove(「検証されたフィールド」);柔軟に使えますが、それを無視したいのがそれです.
エラーを取り出す方法を添付し、単一のエラーを返します.それぞれ出力する必要はありません(これを使って単一のエラーを取り出し、jsonをクライアントに送信します).
        /// <summary>
        ///         
        /// </summary>
        /// <param name="dic"></param>
        /// <returns></returns>
        public static string GetModelErros(this ModelStateDictionary dic)
        {
            string errors = "";
            if (!dic.IsValid)
            {
                //     
                //errors = dic.Keys.First<string>();
                errors = dic.Values.First(t => t.Errors.Count > 0).Errors[0].ErrorMessage;
            }
            return errors;
        }