• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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 = AssembleModelUserModel>(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 AssembleModelT>(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 = AssembleModelUserModel>(base.valueCollection);

    您可能感兴趣的文章:
    • asp.net 代码隐藏的编码模型
    • ASP.NET MVC3关于生成纯静态后如何不再走路由直接访问静态页面
    • ASP.NET的事件模型(很适合学习的文章)
    • asp.net mvc路由篇 如何找到 IHttpHandler方法介绍
    • ASP.NET Web API教程 创建域模型的方法详细介绍
    • asp.net不用设置iis实现url重写 类似伪静态路由
    • ASP.NET MVC5 网站开发框架模型、数据存储、业务逻辑(三)
    • 为ASP.NET MVC及WebApi添加路由优先级
    • 浅析ASP.NET路由模型工作原理
    上一篇:ASP.NET检测到不安全 Request.Form 值解决方案汇总
    下一篇:ASP.NET中实现根据匿名类、datatable、sql生成实体类
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

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