45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 编程代码 > 阅读资讯:ASP.NET Form表单字段值自动填充到操作模型的操作教程

ASP.NET Form表单字段值自动填充到操作模型的操作教程

2015-07-15 14:45:19 来源:www.45fan.com 【

ASP.NET Form表单字段值自动填充到操作模型的操作教程

我们知道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);

 


本文地址:http://www.45fan.com/bcdm/14569.html
Tags: 实现 ASP.NET form
编辑:路饭网
推广内容
推荐阅读
热门推荐
推荐文章
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部