暢想 獨立於框架的Model集中驗證

2021-09-30 07:53:03 字數 2987 閱讀 1852

在學asp.net mvc 中  用到了system.componentmodel.dataannotations; 以特性的形式來給屬性加資料有效性限定,於是有了乙個想法,希望能夠寫乙個只依賴於model的驗證方式,在研究asp.net mvc 資料驗證的過程中,發現輸入值如果不能轉為了對應的屬性值,也就是型別不匹配,如:model屬性值為int 而輸入值為"t74",此時轉換失敗,將會呼叫mvc 預設的錯誤資訊語句,使用者無法指定具體報錯資訊,當然我們同樣也可以通過客戶端驗證來彌補這一缺點,同時這種情況應該可以通過自定義modelbinder來解決,這裡就不多說了,有其它大神的文章可供參詳。

以下是本人**,做乙個引子

乙個學生類,給它的屬性加了資料驗證

public class student

[required(errormessage = "不能為空!")]

public string name

[required(errormessage = "不能為空!")]

[range(1, 150, errormessage = "年齡在到之間")]

public int age

[required(errormessage = "不能為空!")]

[stringlength(50, errormessage = "最長不超過50個字元!")]

public string userid

[required(errormessage = "不能為空!")]

[stringlength(20, errormessage = "最長不超過20個字元!")]

public string userpwd

[required(errormessage = "不能為空!")]

public datetime createtime

[required(errormessage = "詳細不能為空!")]

public studentdetails studetails

}

學生類的子類,學生詳細資訊

public class studentdetails

public string address

public studentdetails(bool ***, string address)

}

以下是驗證model的方法,我們需規定輸入值和屬性欄位的對映關係,下面的mapvalidateinfo 類就是用來記錄輸入值和model屬性的對應

關係,以及出錯後所提示的資訊,以下**同時驗證值型別欄位的型別匹配問題和資料有效性驗證問題。

public class validate

pi.setvalue(instance, retobj, null);

}else

//驗證屬性的資料有效性

validateattribute(instance, pi, errorinfos);}}

if (errorinfos.count > 0) return null;

return instance;

}///

/// 驗證屬性的attribute限定,instance:model例項,pi:要驗證的屬性,errorinfos:存放錯誤資訊

///

private static void validateattribute(object instance, propertyinfo pi, list errorinfos)}}

///

/// 驗證值型別輸入值是否可轉換為屬性對應值型別,type:model中屬性型別,val:屬性輸入值,retobj:轉換後的值

/// 可轉換為true,不可轉換為false

private static bool validatepropertytype(type type, object val, out object retobj)

,new parametermodifier );

var parameters = new object ;

bool success = (bool)tryparse.invoke(null, parameters);

if (success)

return success;

}}

用來存放各字段的錯誤資訊

/// 

/// 錯誤資訊

///

public class errorinfo

///

/// 錯誤資訊

///

public string errormessage

public errorinfo(string errorkey, string errormsg)

}

/// 

/// 型別驗證對映

///

public class mapvalidateinfo

型別輸入不正確!";

///

/// 對應的model輸入值

///

public object val

///

/// model屬性名

///

public string propertyname

///

/// 錯誤提示資訊

///

public string errormessage

}public mapvalidateinfo(string properyname, object val)

public mapvalidateinfo(string properyname, object val, string errormessage)

}

以下是頁面**,模擬提交的資料,

public partial class _default : system.web.ui.page

models.student s = obj != null ? obj as models.student : null;

}}

獨立於架構的自旋等待迴圈

由 jon kennedy.intel idzsupport k.發布於 2018 年 4 月 26 日 翻譯簡體中文正體中文英語法語德語義大利語葡萄牙語俄語西班牙語土耳其語 翻譯為了充分利用當今多核處理器的功能,遊戲開發人員正使用更高階的任務處理系統使工作分散到執行緒池的多個執行緒之中。隨著執行緒...

泛型演算法 獨立於容器的演算法

一 泛型演算法 簡介 1 所有標準庫容器都有支援遞增運算子 遞減運算子 這四種運算子的迭代器 string 和 vector 提供了更多的運算子 以及iter n,iter n,iter n,iter n,iter1 iter2 2 標準庫並未給每乙個容器都定義成員函式來實現排序 查詢 複製等操作,...

laravel 框架在model層的增刪改查

protected table user city public timestamps false 新增 返回id public function cityadd data 單條查詢 public function getfind id else 查詢使用者有幾個uid,返回數量 public fu...