利用反射,泛型,静态方法快速获取表单值到Model。
生活随笔
收集整理的這篇文章主要介紹了
利用反射,泛型,静态方法快速获取表单值到Model。
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
初級的,很簡單,牛人可以不看了。不過還算實用。
在項目中經常需要處理表單,給model賦值,很煩人的一些重復代碼。如下邊的代碼:
Code
????????????News?news?=?new?News();
????????????news.Id?=?int.Parse(Request.Form["Id"]);
????????????news.Category?=?int.Parse(Request.Form["Category"]);
????????????news.Title?=?Request.Form["Title"];
????????????
????????????news.CreateTime?=?DateTime.Parse(Request.Form["CreateTime"]);
????{
???????///?<summary>
????????///?為Model賦值
????????///?</summary>
????????///?<typeparam?name="T">Model</typeparam>
????????///?<param?name="t">model</param>
????????///?<param?name="form">Request</param>
????????///?<returns></returns>
????????public?static?int?GetPost<T>(ref?T?t,?NameValueCollection?form)
????????{
????????????int?va=0;
????????????Type?type?=?t.GetType();//獲取類型
????????????PropertyInfo[]?pi=type.GetProperties();//獲取屬性集合
????????????foreach(?PropertyInfo?p?in?pi?)
????????????{
????????????????if?(form[p.Name]?!=?null)
????????????????{
????????????????????try
????????????????????{
????????????????????????p.SetValue(t,?Convert.ChangeType(form[p.Name],?p.PropertyType),?null);//為屬性賦值,并轉換鍵值的類型為該屬性的類型
????????????????????????va++;//記錄賦值成功的屬性數
????????????????????}
????????????????????catch
????????????????????{????????????????????????
????????????????????}
????????????????}
????????????}
????????????return?va;
????????}
????}
????????????HenqPost<News>.GetPost(ref?news,?Request.Form);
????????????//煩人的為實體類賦值就Over了。不需要任何配置,約定是最好的配置。
約定:表單項的名稱最好和實體類的屬性名字對應(如果你要不一樣,反射方法根據自己的規則改造下)。
為表單賦值,如果是webform的話也可以采取這種方式,可以自己寫下,原理差不多。
在項目中經常需要處理表單,給model賦值,很煩人的一些重復代碼。如下邊的代碼:
Code
????????????News?news?=?new?News();
????????????news.Id?=?int.Parse(Request.Form["Id"]);
????????????news.Category?=?int.Parse(Request.Form["Category"]);
????????????news.Title?=?Request.Form["Title"];
????????????
????????????news.CreateTime?=?DateTime.Parse(Request.Form["CreateTime"]);
經常還會出現寫錯情況,尤其是加班寫這種無聊代碼的時候...
使用反射,泛型,靜態方法可以很容易解決這個問題。說的好像有點高深,其實超級簡單。見代碼。
?
代碼 public?static?class?HenqPost<T>?where?T:?new()//new()為泛型約束,約束類型T必須具有無參的構造函數????{
???????///?<summary>
????????///?為Model賦值
????????///?</summary>
????????///?<typeparam?name="T">Model</typeparam>
????????///?<param?name="t">model</param>
????????///?<param?name="form">Request</param>
????????///?<returns></returns>
????????public?static?int?GetPost<T>(ref?T?t,?NameValueCollection?form)
????????{
????????????int?va=0;
????????????Type?type?=?t.GetType();//獲取類型
????????????PropertyInfo[]?pi=type.GetProperties();//獲取屬性集合
????????????foreach(?PropertyInfo?p?in?pi?)
????????????{
????????????????if?(form[p.Name]?!=?null)
????????????????{
????????????????????try
????????????????????{
????????????????????????p.SetValue(t,?Convert.ChangeType(form[p.Name],?p.PropertyType),?null);//為屬性賦值,并轉換鍵值的類型為該屬性的類型
????????????????????????va++;//記錄賦值成功的屬性數
????????????????????}
????????????????????catch
????????????????????{????????????????????????
????????????????????}
????????????????}
????????????}
????????????return?va;
????????}
????}
?
只所以用靜態方法,主要是圖方便,不用new。
以后所有的表單都可以很簡單的處理了,兩行代碼搞定。
????????????HenqPost<News>.GetPost(ref?news,?Request.Form);
????????????//煩人的為實體類賦值就Over了。不需要任何配置,約定是最好的配置。
約定:表單項的名稱最好和實體類的屬性名字對應(如果你要不一樣,反射方法根據自己的規則改造下)。
為表單賦值,如果是webform的話也可以采取這種方式,可以自己寫下,原理差不多。
轉自:http://www.cnblogs.com/henq/archive/2009/08/31/1557726.html
總結
以上是生活随笔為你收集整理的利用反射,泛型,静态方法快速获取表单值到Model。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: seo 线上工具
- 下一篇: OPK修改操作系统信息 --oobe.x