用過MVC的兄弟們都知道,MVC有模型綁定表單提交的數據功能,那么我也想偷個懶也寫個WebForm版的模型綁定。這里主要定義一個泛型方法,然后通過反射把表單上對應屬性名字的值賦值到反射創建類的屬性上。
有注意的地方:
1、定義的模型類的屬性名要和表單name的名字相對應
2、定義的泛型方法是通過var form = context.Request.Form; 表單 POST過來的數據
public class DataModel{ /// <summary> /// 從表單提交的數據中綁定model模型的值 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity"></param> /// <returns></returns> public static T ModelBing<T>(T entity) { object obj = Activator.CreateInstance(typeof(T)); Type type = entity.GetType(); PRopertyInfo[] proInfos = type.GetProperties(); Dictionary<string, PropertyInfo> dic = new System.Collections.Generic.Dictionary<string, PropertyInfo>(); for (int i = 0; i < proInfos.Length; i++) { dic.Add(proInfos[i].Name, proInfos[i]); } HttpContext context = HttpContext.Current; var form = context.Request.Form; string[] keys = form.AllKeys; foreach (string key in keys) { if (dic.ContainsKey(key)) { PropertyInfo pInfo = dic[key]; var proType = pInfo.PropertyType; object value = null;//存儲轉換對應類型后的值 if (string.IsNullOrEmpty(form[key]))//當post過來的值沒有的時候 { if (proType == typeof(string)) //判斷該屬性是否string類型給空字符串,因為我數據庫該字段不允許為null { //這里我不對值類型的數據進行判斷了,因為值類型會有默認值 pInfo.SetValue(obj, "", null); } continue; } try { if (proType.IsEnum)//如果屬性是枚舉類型,轉換枚舉類型 { value = Enum.ToObject(proType, form[key]); } else if (proType.IsGenericType && proType.Name.StartsWith("Nullable"))//泛型類型 { Type newproType = Nullable.GetUnderlyingType(proType); value = Convert.ChangeType(form[key], newproType); } else { value = Convert.ChangeType(form[key], proType); } pInfo.SetValue(obj, value, null); } catch (Exception ex) { throw ex;//寫入錯誤日志 } } } return (T)obj; }}
前臺可以通過EasyUI框架進行驗證表單再提交到后臺,這里就不再多說了,大家明白如何使用這個方法就好,有不完善的地方希望大家指出!
新聞熱點
疑難解答