我们知道ASP.NET MVC有个强大的地方就是Form表单提交到action的时候,可以直接将Form的参数直接装配到action的参数实体对象中
比如
复制代码 代码如下:
action方法 Register(UserModel userModel)
{
.............................
}
在提交表单的时候,会自动讲表单里面的字段封装到对应的UserModel字段里面
那么 WebForm里面可不可以也紫将呢?
因为每次都要去获得数据,优秀的程序员应该要学会代码封装,代码复用,重复的工作不要做
我们其实可以利用反射来实例化对象的(自动装配)
好了废话不多....
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);
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 国风大师纯音系列《古筝仙子 常静演奏 十指弹一》1CD[FLAC][919MB]
- DasKapital-OneMustHaveChaosInsidetoGiveBirthtoaDancingStar(2024)[24-44.1]WAV
- 王菲.1999-《只爱陌生人》日本东芝版[低速原抓WAV+CUE]
- 张小英1987-金奖金曲第一集[新加坡版][WAV+CUE]
- 鹿晗.2015-重启【海蝶】【FLAC分轨】
- 张芸京.2012-小女孩【金牌大风】【WAV+CUE】
- 余天.2002-雄狮魅力金曲2CD(南方金点系列)【南方】【WAV+CUE】
- 银霞.1982-《结·SAYYESMYBOY》台湾复刻版[WAV+CUE]
- 梁汉文1993-火热动感[引进版][WAV+CUE]
- 梁汉文2008-EDMONDHITS48[香港]3CD[WAV+CUE]
- 国风大师纯音系列《童丽-[渭城曲]》1CD[WAV分轨][593.5MB]
- 国风大师纯音系列《许菱子《烧筝2》古筝曲集》1CD[WAV分轨][1.3GB]
- 王子异《1996 Part.2》[320K/MP3][18.29MB]
- 群星.1994-宝丽金最倾情3CD【宝丽金】【WAV+CUE】
- 乐俊亨.2024-同泪【CharioticMusic】【FLAC分轨】