C#+ASP.NET 2.0定制复合组件之高级篇
法形成对照 。还要注意,我把多个功能放到onclick属性中;而且,函数调用的最后返回 false以便取消按钮将执行的任何回寄。
最后,代码将在一个对Render重载的方法中初始化对客户端函数 BuildItemList的调用。这看起来很象我在EnhancedListBox控件中向你介绍的那 个,在此不再重复。注意,在这个控件中,我注册了两个隐藏的文本域,每一个 相应于一个ListBox。
现在,你已经构建成功该复合控件,能够提供一些客户端JavaScript,并且 把它绑定到按钮上。与以前一样,你可以把它放到一个表单上并且使用它;但是 ,在你添加同步代码之前,它仍将会遇到你在第一个控件中所遇到的问题—你可 以前后移动项,但是一旦你初始化一个回寄(通过表单上的任何其它控件),该控 件就会恢复到它回寄之前的状态。 为了修改这个问题,你要实现你在第一个控件中所做的同样的工作。然而, 既然你在开发一个复合控件,而不是扩展一个已经现有的控件,那么你需要实现 IPostBackDataHandler接口并且提供LoadPostData和 RaisePostDataChangedEvent方法的实现代码。这些实现(见列表7)与前面的控件 基本一致,除了你要实现两个EnhancedListBox控件中的项集合的同步而不是只 考虑一个控件外。并且与以前一样,你需要确保你保存你的SelectedIndex位置 ;这样以来,在你完成项集合的同步后你就可以把它们设置回去。还要注意,在 第一个控件中,你重载了基控件的LoadPostData方法,因此在某处调用了它的基 类。现在,既然你要从头编写一个复合控件,那么就没有基类可调用,而仅需提 供你自己的方法实现。 这个控件的最后版本包含若干新的属性:包括用来决定是否添加到一个列表 中的项能够被从另一个列表中删除的属性(如果一个列表将允许出现重复项的话 );它还包含可扩展的风格化以实现最大化重用的目的,等等。 就这些。你已经使用了可用于客户端脚本中的隐藏的文本域来存储列表框的 状态。在回寄期间,你使用隐藏文本域的内容来与服务器端项集合重新同步。最 终结果是一个漂亮的复合控件—允许你在没有服务器回寄的情况下实现各列表项 间的来回移动,而当一个回寄真正发生时仍能够保持这种变化。 四、取二者最优 前面我没有提及的一个细节是为什么我在本文中混合了两个控件。文章一开 始,我首先向你展示了一个标准ListBox控件的增强版本,然后把这个增强控件 的两个实例应用于ListMover控件,而没有使用两个标准ListBox控件来构建这个 ListMover。在本文中,我没有涉及的是ListMover控件的属性部分,它们将负责 映射添加到EnhancedListBox控件上的属性。通过这种方式,我就能够从包含两 个EnhancedListBox控件的ListMover控件中控制两个EnhancedListBox控件的增 强功能。因此,你可以看到,你拥有结合了两个控件的最好的功能—你有了一个 ListMover控件,它允许你在两个列表或单个列表的各项之间进行项的移动与重 排序。 其实,这里真正关键的地方在于面向Web控件的ASP.NET开发—完全封装。本 文中的EnhancedListBox控件包含实现其目标(对它的项进行重排序)的所有代 码。当我把两个这种控件包括在一个ListMover控件中时,我可以使用所有伴随 着它们的智能性作为新控件的额外功能,包括每一个控件含有的客户端脚本以及 在EnhancedListBox控件中的客户端到服务 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |