国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

.net的WebForm模擬MVC進(jìn)行模型綁定,讓自己少操勞

2019-11-17 02:13:21
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
.net的WebForm模擬MVC進(jìn)行模型綁定,讓自己少操勞

用過(guò)MVC的兄弟們都知道,MVC有模型綁定表單提交的數(shù)據(jù)功能,那么我也想偷個(gè)懶也寫(xiě)個(gè)WebForm版的模型綁定。這里主要定義一個(gè)泛型方法,然后通過(guò)反射把表單上對(duì)應(yīng)屬性名字的值賦值到反射創(chuàng)建類(lèi)的屬性上。

有注意的地方:

1、定義的模型類(lèi)的屬性名要和表單name的名字相對(duì)應(yīng)

2、定義的泛型方法是通過(guò)var form = context.Request.Form; 表單 POST過(guò)來(lái)的數(shù)據(jù)

public class DataModel{    /// <summary>    /// 從表單提交的數(shù)據(jù)中綁定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;//存儲(chǔ)轉(zhuǎn)換對(duì)應(yīng)類(lèi)型后的值                if (string.IsNullOrEmpty(form[key]))//當(dāng)post過(guò)來(lái)的值沒(méi)有的時(shí)候                {                    if (proType == typeof(string))  //判斷該屬性是否string類(lèi)型給空字符串,因?yàn)槲?a href="http://m.survivalescaperooms.com/sql.asp">數(shù)據(jù)庫(kù)該字段不允許為null                    {                                 //這里我不對(duì)值類(lèi)型的數(shù)據(jù)進(jìn)行判斷了,因?yàn)橹殿?lèi)型會(huì)有默認(rèn)值                        pInfo.SetValue(obj, "", null);                    }                                                           continue;                }                try                {                    if (proType.IsEnum)//如果屬性是枚舉類(lèi)型,轉(zhuǎn)換枚舉類(lèi)型                    {                        value = Enum.ToObject(proType, form[key]);                    }                    else if (proType.IsGenericType && proType.Name.StartsWith("Nullable"))//泛型類(lèi)型                    {                        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;//寫(xiě)入錯(cuò)誤日志                }            }        }        return (T)obj;    }}

前臺(tái)可以通過(guò)EasyUI框架進(jìn)行驗(yàn)證表單再提交到后臺(tái),這里就不再多說(shuō)了,大家明白如何使用這個(gè)方法就好,有不完善的地方希望大家指出!


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 东乌珠穆沁旗| 泸水县| 运城市| 顺昌县| 翁牛特旗| 句容市| 万源市| 积石山| 阳信县| 东阿县| 靖边县| 巩义市| 潞西市| 南京市| 永胜县| 枣强县| 永城市| 云南省| 深泽县| 昌乐县| 会理县| 眉山市| 河间市| 永嘉县| 精河县| 鄂尔多斯市| 德兴市| 呼伦贝尔市| 芷江| 增城市| 灵石县| 古交市| 洪江市| 温泉县| 青浦区| 宜春市| 武城县| 大石桥市| 连城县| 靖远县| 札达县|