在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
同样的事情,在C/S结构的程序设计中,就变得非常简单,我们只需要一次创建,那么控件就永远会在那个地方,除非显示删除它。 为什么会这样,原因就在于c/s和b/s的架构不同,c/s是一次创建界面,而b/s结构是多次创建。b/s结构基于非持续连接的网络,因此她需要维护每一次交互的状态,根据这些状态信息来创建界面。虽然在asp.net中,相当大一部分工作已经被隐藏起来,并且已经做的很好了,但是在动态控件这一块,我觉得仍然需要有改进的地方。 来看看传统上我们是怎样处理处理动态控件的 Private button_clicked(….) { //…. Do something Button btn = new Button(); PlaceHolder1.Controls.Add(btn); Btn.Click += ….; Btn.Text = “…” ViewStatue[“btnCreated”] = true; //设置控件被创建标志 // … } 然后在页面的Page_Load事件中还要 Page_Load(…) { If (ViewStatue[“btnCreated”] != null) { Button btn = new Button(); // 重复button_clicked事件里的步骤 } } 可能仅仅一两个同类的控件还没什么,但是如果碰上需要动态创建很多不同种类控件,控件的地点又分布在页面的各个地方,那么这件事就会变得非常复杂和难以把握。初步 个人觉得,维护动态创建的控件的状态,完全可以由Page的基类来实现,由这个类完成对动态加载控件的监控,并在页面重新载入的适当时候,创建控件,并加入到合适的地方,使得开发人员感觉控件的创建是一次性的,不需要每次页面载入的时候都要重新创建。 这个基类实现的初步想法如下 Public class PersistanceDynamicControl : System.Web.UI.Page { // 存放动态创建的控件信息列表,当然这里仅仅是演示,实际应用中应该会用到ViewState来保存这张列表 Object [] dynamicControlsList ; // 用来在页面上加入动态创建的控件 // 此函数为实现的核心部分,它可以利用反射将建立的动态控件的状态信息读取(包括位置信息),并保存,以便在下一此页面建立的时候创建这些控件。 Public AddControl(Control parentControl, Control dynamicControl) //该函数用来根据保存动态控件列表,创建控件,并将它们放入合适地点,该函数可以在OnInit函数中被调用 Private CreateDynamicControls() Public override OnInit() { CreateDynamicControls(); } //索引器,返回动态创建控件的引用 Object DynamicControls[string ControlName] } 然后,创建的页面只需要继承这个基类,用AddControl()函数来加入动态创建的控件,用 (ClassType)base.DynamicControls[“ClassName”]的方式得到动态创建的控件的引用。动态控件一旦加入到页面上,便一直可以访问,不管page post back多少次。这样,就和c/s结构有点类似了。 这只是自己的一个不成熟的想法,目前还没有实现,欢迎大家批评。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论