[.net MVC] ViewModel 驗證 DataAnnotations

我想透過ViewModel 屬性的檢核上,以戴帽子的方式做限制我想大家都不陌生。

但今天發生一個有趣的問題,在此紀錄下,目前還找不到原因。

        /// <summary>
        /// 數量
        /// </summary>
        [Range(0,99999999999,ErrorMessage = RegexMsgSet.RangeNeedBetween)]
        public int Sup_Qty { get; set; }

有一個屬性我們規範他長度是在12以內。

        public JsonResult Update(ProposeNumSettingEditViewModel viewModel)
        {
            //模型驗證
            bool vaildation = ModelState.IsValid && viewModel != null;

            var result = new
            {
                IsSuccess = vaildation ? true : false,
                ErrorMessage = !vaildation ?
                               ModelState.Where(x => x.Value.Errors.Count > 0)
                              .ToDictionary(k => k.Key, k => k.Value.Errors
                              .Select(e => e.ErrorMessage).ToArray()) : null,
            };
            return Json(result);
        }

在Controller 這邊也是接下ViewModel 作為參數

今天我們在前端AJAX Post 時,帶入Json的資料

IC_Memo: ""
IC_Qty: "19999999999999999999999999999999999999"
IC_UnitPrice: "600000"

顯然長度是超過我們ViewModel 所規範的長度
但我們可以看到監看式IC_Qty 是 0 (猜測應該是因為長度過長所以才這樣)

可是有趣的是 

bool vaildation = ModelState.IsValid && viewModel != null;

這段還是會判斷是 false 

----------------------------------------------------
但如果前端是傳 -1 ,那接近來的就會正常顯示-1

而vaildation 那段檢核,也當然是吐出 false

結論:為了要測試長度的驗證是否驗證到,一開始傳入的時候還想說怎麼會沒接到,在前端下console看丟進Ajax Post 的參數值是正常的(199999999999),但是透過中斷點監看式是0,不過驗證還是不會給過這點倒是不用懷疑的。