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

首頁 > 學院 > 開發設計 > 正文

ASP.NET WebForm Form表單如何實現MVC那種“自動裝配”效果呢?

2019-11-17 02:09:12
字體:
來源:轉載
供稿:網友
asp.net WebForm Form表單如何實現MVC那種“自動裝配”效果呢?

我們知道ASP.NET MVC有個強大的地方就是Form表單提交到action的時候,可以直接將Form的參數直接裝配到action的參數實體對象中

比如

action方法 Register(UserModeluserModel)

{

............................. 

}

在提交表單的時候,會自動講表單里面的字段封裝到對應的UserModel字段里面

那么 WebForm里面可不可以也紫將呢?

因為每次都要去獲得數據,優秀的程序員應該要學會代碼封裝,代碼復用,重復的工作不要做

我們其實可以利用反射來實例化對象的(自動裝配)北盟網www.bamn.cn

好了廢話不多....

pageload里面很簡單了

PRotected void Page_Load(object sender, EventArgs e)        {            if (!IsPost())            {                InitPage();//第一次訪問呈現頁面            }            else            {                UserModel userModel = AssembleModel<UserModel>(base.valueCollection);            }        }

關鍵就是基類里面的AssembleModel 方法了

基類里面

我們首先獲取到上下文的參數 IT404

protected NameValueCollection valueCollection = HttpContext.Current.Request.Params;

基類很簡單,就是將上下文的提交的參數存放到valueCollection

然后再看AssembleModel方法了,這是一個泛型方法

 /// <summary>        /// 反射獲取類的屬性        /// </summary>        /// <param name="type"></param>        /// <returns></returns>        protected PropertyInfo[] GetPropertyInfoArray(Type type)        {            PropertyInfo[] props = null;            try            {                object obj = Activator.CreateInstance(type);                props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);            }            catch (Exception ex)            {            }            return props;        }        /// <summary>        /// 根據NameValueCollection 自動裝配        /// </summary>        /// <typeparam name="T"></typeparam>        /// <param name="valueCollection"></param>        /// <returns></returns>        protected T AssembleModel<T>(NameValueCollection valueCollection)        {            PropertyInfo[] propertyInfoList = GetPropertyInfoArray(typeof(T));            object obj = Activator.CreateInstance(typeof(T), null);//創建指定類型實例            foreach (string key in valueCollection.Keys)//所有上下文的值            {                foreach (var PropertyInfo in propertyInfoList)//所有實體屬性                {                    if (key.ToLower() == PropertyInfo.Name.ToLower())                    {                        PropertyInfo.SetValue(obj, valueCollection[key], null);//給對象賦值                    }                }            }            return (T)obj;        }

很簡單,就是遍歷參數,然后用反射遍歷出實體類的共有屬性,然后根據名字name來匹配和賦值

所以以后我們只需要一句代碼就能自動裝配上從客戶端存過來的值了

UserModel userModel = AssembleModel<UserModel>(base.valueCollection);好了,感謝你的閱讀,希望對你有幫助了,另外 本博客將會有一些原創的視頻教程分享給大家,感謝大家的支持


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 曲阳县| 桑植县| 武胜县| 黄石市| 夏邑县| 平邑县| 九江市| 永宁县| 乐至县| 宿州市| 宣武区| 阿城市| 灵川县| 靖远县| 云梦县| 宁南县| 连江县| 崇礼县| 疏勒县| 庆云县| 富平县| 阳西县| 兴国县| 太原市| 罗源县| 琼结县| 泾源县| 盖州市| 镇坪县| 庐江县| 炉霍县| 阿克| 阳城县| 宜宾市| 平泉县| 怀仁县| 秀山| 高要市| 凤台县| 泾源县| 南丰县|