当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET中实现Form表单字段值自动填充到操作模型中

ASP.NET中实现Form表单字段值自动填充到操作模型中

2017年12月12日  | 移动技术网IT编程  | 我要评论

一路向西完整版快播,秋瓷炫 韩佳人,下电影的网站

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网