我想透過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,不過驗證還是不會給過這點倒是不用懷疑的。