我們知道ASP.NET MVC有個強大的地方就是Form表單提交到action的時候,可以直接將Form的參數直接裝配到action的參數實體對象中
比如
{
.............................
}
那么 WebForm里面可不可以也紫將呢?
因為每次都要去獲得數據,優(yōu)秀的程序員應該要學會代碼封裝,代碼復用,重復的工作不要做
我們其實可以利用反射來實例化對象的(自動裝配)
好了廢話不多....
pageload里面很簡單了
關鍵就是基類里面的AssembleModel 方法了
基類里面
我們首先獲取到上下文的參數 IT404
基類很簡單,就是將上下文的提交的參數存放到valueCollection
然后再看AssembleModel方法了,這是一個泛型方法
}
return props;
}
/// summary>
/// 根據NameValueCollection 自動裝配
/// /summary>
/// typeparam name="T">/typeparam>
/// param name="valueCollection">/param>
/// returns>/returns>
protected T AssembleModelT>(NameValueCollection valueCollection)
{
PropertyInfo[] propertyInfoList = GetPropertyInfoArray(typeof(T));
object obj = Activator.CreateInstance(typeof(T), null);//創(chuàng)建指定類型實例
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來匹配和賦值
所以以后我們只需要一句代碼 就能自動裝配上從客戶端存過來的值了