当前位置:首页 > C#+ASP.NET 2.0定制复合组件之基础篇

C#+ASP.NET 2.0定制复合组件之基础篇

点击次数:948  更新日期:2010-12-26
\n

摘要:在本系列文章中,我们首先讨论使用ASP.NET 2.0构建一个标准ListBox控件的增强版本(EnhancedListBox)。这个控件能够对它的项进行重排序,并且能够实现客户端与服务器端的同步功能。然后,我们把这样的两个控件组合起来创建一个复合控件(ListMover)。

  一、 引言

  构建提供丰富的客户端接口的复杂Web控件经常需要把一些客户端JavaScript代码与控件的服务器端代码集成到一起。然而,在一些情况下,为了达到某种巧妙的效果而把问题搞得过于复杂经常会破坏控件的内部服务器代码与生成的客户端HTML代码之间的数据同步,而当进行页面回寄时这将成为一个问题。在本文中,我将首先构建两个“很酷”的Web控件(都极容易导致这一问题),然后向你展示如何来修改这一“脆弱性”。

  本文中,我们将使用C#+ASP.NET 2.0来定制这些控件,并在后面向你简短介绍如何使之工作在ASP.NET 1.1(或1.0)环境中。

  当前,HTML仍然保持为Web应用程序生成阶段的主要语言。遗憾的是,它所使用的协议是无状态的,所以必须由Web开发者自己来处理这种无状态特点。通过使用一些架构特征,例如回寄机制和ViewState变量,ASP.NET有助于处理这个问题。然而,为了实现某些功能,还需要再作努力,从而借助于回寄事件把Web页面不断向服务器发出请求的各种技术结合起来。

  具体地说,我将分析如何使用JavaScript和DHTML存取在客户端生成的元素。其实,把客户端和服务器功能融合到一起要求使用大量的技巧才能达到最佳用户体验效果,而微软在其ASP.NET校验控件中就实现了这一点。为了提供一种丰富的客户端校验效果,该控件中使用了大量的JavaScript。

  作者注:本文假定你对定制Web控件开发有一个基本了解。因此,我将不再重复Web控件开发的基础内容,例如属性工作原理与风格的添加方式。

  二、 一种常规实现方法

  下面,我想向你展示如何构建一组很酷的控件,它们具有你在商业控件中才能看到的优秀功能。稍后,我将继续展示定制Web控件带给Web编程的完全封装优点。既然你已经了解如何开发定制Web控件,那么你应该知道的一个概念是封装一个控件所有的功能和行为(就象你在一个标准业务对象中所实现的那样)。在学习构建具有复杂行为的控件时,这种封装将极有用处。

  在第一个控件中,我将向你展示如何构建一个称为EnhancedListBox的控件。这个控件将扩展ASP.NET的ListBox控件—添加一个头部和一些重排序按钮。注意,这是一个直接继承自常规ListBox的控件。
之后,我还将向你展示如何构建一个复合控件—ListMover,它将包含两个上面提到的EnhancedListBox控件。这个ListMover控件还包含一些允许你从一个列表到另一个列表中移动项的按钮。

  其实,用常规方法(非面向Web控件的)来实现这种ASP.NET功能也并不困难。首先,你要把一个常规ListBox控件拖动到你的Web表单上并且使用一些数据填充它。

  然后,再添加一个标签用作标题,还有一组按钮用作重排序按钮。捕获这些按钮的服务器端事件是ASP.NET中的标准操作;因此,你只需要使用一种方法来取得当前选定的项并且根据用户点击的按钮从而把它放到该列表中的更高或更低的位置即可。例如,你可能编写如下的代码实现移动列表中的一项。


\n

i_Index = ListBox1.SelectedIndex;
o_Item = ListBox1.SelectedItem;
ListBox1.Items.RemoveAt(this.SelectedIndex);
i_Index–;
if(i_Index < 0) i_Index = 0;
ListBox1.Items.Insert(i_Index, o_Item);

\n