在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
我们知道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) { } /// <summary> 很简单,就是遍历参数,然后用反射遍历出实体类的共有属性,然后根据名字name来匹配和赋值 所以以后我们只需要一句代码 就能自动装配上从客户端存过来的值了 复制代码 代码如下: UserModel userModel = AssembleModel<UserModel>(base.valueCollection); |
请发表评论