如何在ASP.NET中将Form表单的字段值填充到模型中-创新互联

今天就跟大家聊聊有关如何在ASP.NET中将Form表单的字段值填充到模型中,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

创新互联公司是一家专业提供宁县企业网站建设,专注与成都做网站、成都网站制作、成都外贸网站建设H5高端网站建设、小程序制作等业务。10年已为宁县众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。

我们知道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(base.valueCollection);
            }
        }


关键就是基类里面的AssembleModel 方法了

基类里面

我们首先获取到上下文的参数 IT404


复制代码 代码如下:


protected NameValueCollection valueCollection = HttpContext.Current.Request.Params;


基类很简单,就是将上下文的提交的参数存放到valueCollection

然后再看AssembleModel方法了,这是一个泛型方法

复制代码 代码如下:


///


        /// 反射获取类的属性
        ///

        ///
        ///
        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;
        }

        ///


        /// 根据NameValueCollection 自动装配
        ///

        ///
        ///
        ///
        protected T AssembleModel(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(base.valueCollection);


看完上述内容,你们对如何在ASP.NET中将Form表单的字段值填充到模型中有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


网站名称:如何在ASP.NET中将Form表单的字段值填充到模型中-创新互联
分享URL:http://hbruida.cn/article/cceehs.html