主页 > 知识库 > ASP.NET中实现Form表单字段值自动填充到操作模型中

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中实现Form表单字段值自动填充到操作模型中》,本文关键词  ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 收缩
    • 微信客服
    • 微信二维码
    • 电话咨询

    • 400-1100-266