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

 更新时间:2015年06月08日 08:48:10   投稿:junjie  
这篇文章主要介绍了ASP.NET中实现Form表单字段值自动填充到操作模型中,本文模仿MVC模式中的自动映射表单了模型,使用泛型和反射实现,需要的朋友可以参考下

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

相关文章

  • asp.net简单实现单点登录(SSO)的方法

    asp.net简单实现单点登录(SSO)的方法

    这篇文章主要介绍了asp.net简单实现单点登录(SSO)的方法,结合简单实例形式较为详细的分析了单点登录的原理与asp.net的相关实现技巧,需要的朋友可以参考下
    2015-12-12
  • Asp.net FCKEditor 2.6.3 上传文件没有权限解决方法

    Asp.net FCKEditor 2.6.3 上传文件没有权限解决方法

    到Fckeditor官方网站下载FredCK.FCKeditorV2.vs2005 (asp.net)
    2009-02-02
  • ASP.NET CORE实现跨域

    ASP.NET CORE实现跨域

    这篇文章介绍了ASP.NET CORE实现跨域的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • ADO.NET编程之基础知识

    ADO.NET编程之基础知识

    ADO.NET是专门为帮助开发人员建立在Intranet或Internet上使用的高效多层数据库应用程序而设计的,它作为Windows平台下开发应用系统的数据访问技术,已经在企业信息系统的开发中得到了广泛的应用。
    2015-06-06
  • .NET Core对象池的应用:编程篇

    .NET Core对象池的应用:编程篇

    对象池就是对象的容器,旨在优化资源的使用,通过在一个容器中池化对象,并根据需要重复使用这些池化对象来满足性能上的需求。这篇文章主要介绍了.NET Core对象池的应用,感兴趣的小伙伴可以参考一下
    2021-09-09
  • .net6简单使用NPOI读取Excel的项目实践

    .net6简单使用NPOI读取Excel的项目实践

    本文主要介绍了.net6简单使用NPOI读取Excel的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • .NET Web开发之.NET MVC框架介绍

    .NET Web开发之.NET MVC框架介绍

    MVC是一种架构设计模式,该模式主要应用于图形化用户界面(GUI)应用程序。那么什么是MVC?MVC由三部分组成:Model(模型)、View(视图)及Controller(控制器)
    2014-03-03
  • 3分钟快速学会在ASP.NET Core MVC中如何使用Cookie

    3分钟快速学会在ASP.NET Core MVC中如何使用Cookie

    这篇文章主要给大家介绍了关于如何通过3分钟快速学会在ASP.NET Core MVC中使用Cookie的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用ASP.NET具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • ASP.NET Core中Cookie验证身份用法详解

    ASP.NET Core中Cookie验证身份用法详解

    本文详细讲解了ASP.NET Core中Cookie验证身份的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02

最新评论