一、简介
在许多Web应用程序中,能够更改内容的外观以及允许用户选择和排列要显示的内容是非常有用的。ASP.NET Web Part功能由一组用于创建网页的控件组成,这些控件能显示模块化内容并允许用户更改外观和内容。
在本示例中,我将创建一个使用Web Part控件集的页面,用于创建用户可以修改或进行个性化设置的网页。本示例具体实现如下任务:
◆向页添加Web Part控件。
◆创建一个自定义用户控件,并将其用作Web Part控件。
◆允许用户对页面上的Web Part控件的布局进行个性化设置。
◆允许用户编辑Web Part控件的外观。
◆允许用户从可用Web Part控件的目录中进行选择。
(一)先决条件
若要完成本示例,您需要:
◆可标识各个用户的站点。如果您有一个已配置了ASP.NET成员资格的站点,则可以使用该站点作为本示例的起点。
◆配置过的个性化设置提供程序和数据库。Web Part个性化设置默认情况下是启用的,它使用SQL个性化设置提供程序(SqlPersonalizationProvider)以及Microsoft SQL Server Exprss Edition(SSE)存储个性化设置数据。此示例使用SSE和默认的SQL提供程序。如果安装了SSE,则不需要进行任何配置。SSE在安装Microsoft Visual Studio 2005时作为可选部分免费提供,也可以从Microsoft.com免费下载。若要使用SQL Server的某个完整版本,必须安装和配置ASP.NET应用程序服务数据库,并配置SQL个性化设置提供程序以连接到该数据库。当然,你也可以创建和配置自定义提供程序,以便使用其他非SQL数据库或存储解决方案。
【注】本文程序调试环境为Windows XP Professional+VS2005。
二、案例分析
现在,我们开始创建一个使用Web Part控件显示静态内容的页面。使用Web Part的第一步是创建具有两个必需的结构元素的页面。首先,Web Part页需要一个WebPartManager控件来跟踪和协调所有Web Part控件;其次,Web Part页需要一个或多个区域(区域即“Zone”,是包含WebPart或其他服务器控件并且占据页面上指定区域的复合控件)。
【注意】您无需执行任何操作即可启用Web Part个性化设置;Web Part控件集默认情况下即启用该设置。在站点上第一次运行Web Part页时,ASP.NET会设置默认的个性化设置提供程序来存储用户个性化设置。
(一)创建包含Web Part控件的页面
1.启动VS2005,创建一个ASP.NET网站WebPartsDemo,并将默认页面Default.aspx重命名为WebPartsDemo.aspx。
2.切换到“设计”视图。
3.确保在“视图”菜单中选中“非可视控件”和“详细信息”选项,以便查看不具有用户界面的布局标记和控件。
4.在设计图面上将插入点放在标记前,然后按Enter添加一个新行。将插入点放在新行字符前,单击菜单上的“块格式”下拉列表控件,再选择选项“标题1”。在该标题中添加文本“Web Part应用演示”。
5.从工具箱的“WebParts”选项卡中,将一个WebPartManager控件拖动到页上,并将它放置在新行字符之后,标记之前。
【注】WebPartManager控件不呈现任何输出,因此在设计器图面上显示为灰框。
6.将插入点放置在标记内。
7.在“布局”菜单中单击“插入表”,然后创建一个包含一行三列的表。单击“单元格属性”按钮,从“垂直对齐”下拉列表中选择“顶端对齐”,单击“确定”创建表格。
8.将一个WebPartZone控件拖动到该表左边的列中,并设置下面相应的属性:
◆ID—SidebarZone;
◆HeaderText—“侧栏”;
9.再次将一个WebPartZone控件拖动到该表中间的列中,并设置下面的属性:
◆ID—MainZone;
◆HeaderText—“主要”;
10.保存文件。
现在,页面中具有两个能够单独控制的不同区域。但是,这两个区域中都没有任何内容,因此下一步就是创建内容。此示例中使用的是仅显示静态内容的Web Part控件。
Web Part区域的布局由
(二)为主要区域创建内容
1.从工具箱的“标准”选项卡中将一个Label控件拖动到ID属性设置为MainZone的区域的内容区域中。
2.切换到“源”视图。注意,系统自动添加了一个
3.为
|
(三)创建用户控件
2.将插入点放在刚添加的文本框之后,再按Enter添加一个新行。
3.将Button控件拖动到页面上刚添加的文本框下面的新行上。
4.切换到“源”视图,并确保用户控件的源代码如下所示:
|
2.切换到“设计”视图。
3.将已创建的用户控件页SearchUserControl.ascx从“解决方案资源管理器”拖放到ID属性设置为SidebarZone的区域中。
4.保存WebPartsDemo.aspx页面。
5.切换到“源”视图。
6.在SidebarZone的
在浏览器中加载WebPartsDemo.aspx页面,结果应该如下图1所示。
图1.具有两个区域的Web Part演示页
该图中,每个控件的标题栏中都有一个向下的箭头,用于提供对控件上可执行操作的动作菜单的访问。单击其中一个控件的动作菜单,然后单击“最小化”,会发现该控件被最小化。在动作菜单上单击“还原”,控件还原为正常大小。
Web Part为用户提供了通过将Web Part控件从一个区域拖动到另一个区域来更改其布局的功能。除了允许用户将WebPart控件从一个区域移动到另一个区域外,还允许用户编辑控件的各种特征—包括外观、布局和行为。Web Part控件集为WebPart控件提供了基本的编辑功能。
【注】本示例中,我们仅实现了基本的编辑功能,但您可以创建自定义编译控件来允许用户编辑WebPart控件的功能。和更改WebPart控件的位置一样,编辑控件属性时需要由ASP.NET个性化设置来保存用户所做的更改。
下面,我们将为用户添加相应的功能,使之能编辑页面上所有WebPart控件的基本特性。若要启用这些功能,应向页面中添加其它自定义控件以及一个
(2)在“添加新项”对话框中,选择“Web用户控件”。将新文件命名为DisplayModeMenu.ascx,并取消选项“将源代码放在单独的文件中”。
(3)单击“添加”新建控件。
(4)切换到“源”视图。
(5)按如下内容修改源码(此用户控件允许用户更改其视图和显示模式的Web Part控件集功能,并允许您在某种显示模式下更改页面的物理外观和布局):
(1)打开WebPartsDemo.aspx页,并切换到“设计”视图。
(2)在“设计”视图中将插入点放在以前添加的WebPartManager控件之后。在文本后添加一个硬回车,这样会在WebPartManager控件之后生成一个空行。将插入点放置在空行上。
(3)将刚创建的用户控件(文件名为DisplayModeMenu.ascx)拖动到WebPartsDemo.aspx页上,并放置在空行上。
(4)将一个EditorZone控件从工具箱的“WebParts”部分拖动到WebPartsDemo.aspx页面上表格最右边的一个单元格中。
(5)从工具箱的“WebParts”部分将一个AppearanceEditorPart控件和一个LayoutEditorPart控件拖动到EditorZone控件上。
(6)切换到“源”视图。于是,上面单元格中相应的代码类似如下。
|
|
|
(11)单击“显示模式”菜单,再选择“Browse”以返回到浏览模式。
(12)现在,该控件具有更新了的标题但没有边框,如下面的图4所示。
图4.编辑过的Web Part演示页
七)在运行时添加Web Part
还可以允许用户在运行时向页面中添加Web Part控件。为此,应为WebPartsDemo.aspx页面配置Web Part目录—由它给用户提供可添加的Web Part控件列表。
【注意】在本示例中,我们创建一个包含FileUpload和Calendar控件的模板。在此,我们仅为了测试该目录的基本功能,但得到的Web Part控件不会具有任何实际的功能。
1.允许用户在运行时添加Web Part
(2)从工具箱的“WebParts”选项卡中将一个CatalogZone控件拖动到表格最右边的列中,并放在EditorZone控件的下方。
(3)在“属性”窗格中,设置CatalogZone控件的HeaderText属性为“添加Web Parts”。
(4)从工具箱的“WebParts”部分将一个DeclarativeCatalogPart控件拖动到CatalogZone控件的内容区域。
(5)单击DeclarativeCatalogPart控件右上角中的箭头,显示其“任务”菜单,然后选择“编辑模板”。
(6)从工具箱的“标准”部分将一个FileUpload控件和一个Calendar控件拖动到DeclarativeCatalogPart控件的“WebPartsTemplate”部分。
(7)切换到“源”视图。观察
(6)单击“显示模式”下拉菜单,再选择“Browse”,则目录消失,页面随即被刷新。
(7)关闭浏览器,再次加载该页面,上次所做的更改会被保存下来。
三、小结
本文仅提供了在ASP.NET网页上使用Web Part控件的基本示例。正如在前面的【理论篇】中所述,Web Part控件的应用包括三大方面;其中,基于Web Part控件的Web控件开发与创建基于Web Part的完整的、可个性化设置的Web应用程序是较复杂的应用。以后的文章中,我们还会深入探讨Web Part控件在用户控件或自定义控件开发中的应用。