了解 Web Part 框架

来源:百度文库 编辑:神马文学网 时间:2024/04/28 13:42:57
发布日期: 4/1/2004 | 更新日期: 4/1/2004
Stephen Walther
2003 年 10 月
应用于:Microsoft ASP.NET WhidbeyMicrosoft Visual C#_
摘要:学习使用即将发布的新版 ASP.NET(代号为 ASP.NET "Whidbey",与即将发布的 Microsoft Visual Studio .NET 代号一致)的功能强大的新 Web Part 框架控件,来轻松创建 Web 应用程序。(11 页打印页)
下载ASP.NET Pro Samples。
内容
注 本文档撰写于产品发布之前,因此不能确保其中的所有详细信息均与正式产品完全吻合。这里的信息基于本文档发布时的产品,只适用于计划目的。信息若有变动,恕不预先通知。
大多数 Web 站点并不考虑访问者的需要和兴趣,而对每个人显示相同的内容。例如,如果您和我一起访问 New York Times Web 站点主页,我们会看到完全相同的内容。即使我访问 New York Times的原因只是为了看最新的电影评论,而您访问的原因只是为了看最新的球赛比分,但看到的内容是一样的。如果您和我在访问同一主页时能看到我们各自需要的内容不是很好吗?
Microsoft ASP.NET Whidbey 包含了一套旨在解决此问题的新控件,称为 Web Part。 Web Part 是完全个性化的。使用它们构建 Web 页时,访问页面的任何人都能修改其内容和布局。如果您曾经个性化定制过 MSN 或 Yahoo! 的主页,则应已熟悉 Web Part 的思想(见图 1)。

图1.您可以个性化定制 MSN 主页,以便它只显示您感兴趣的内容。
业界专家预测将会出现一个健全的第三方自定义 Web Part 控件市场。这是个好消息,因为开发人员只需从已经存在的 Web Part 目录中选出几个控件即可构建新的 Web 应用程序。通过将已经存在的组件组合在一起,您也可以构建一个 Web 应用程序,就像在www.dell.com 上组装一台笔记本电脑一样。
在本文中,将向您介绍 ASP.NET Whidbey 的 Web Part 框架。您将学习如何构建一个简单的公司 intranet 门户站点,并使用户能够利用 Web Part 个性化定制此站点。我将以引导您创建 Northwind 门户网站页面为例,该门户网站是 Northwind Traders Co. 雇员使用的内部 Web 站点。
内容
本页内容
使用 Web Part 创建页面
创建门户 Web Part
将页面划分为 Web Part Zone
允许自定义 Web Part
使用 Web Part 创建页面
使用 Web Part 设计页面之前,您必须先定义页面将包含的 Web Part。创建 Web Part 的基本方式有三种:您可以使用 ContentWebPart 控件,创建 Web User 控件,或创建 Custom 控件。最简单的方式是使用 ContentWebPart 控件。您可以在 ContentWebPart 模板中包含任何感兴趣的内容,然后将该内容视为一个 Web Part。例如,此 Web Part 只显示静态文本 "Hello World!":
Hello World!
请注意,ContentWebPart 是一个模板控件。因此,您应将文本 "Hello World" 放入 ContentTemplate 模板中才能显示。另外还要注意,我们已为 ContentWebPart 提供了一个 ID。与 ASP.NET 1.0 中的许多控件不同,ContentWebPart 要求 ID 是唯一的,否则您将收到一个异常。
创建 ContentWebPart 很容易。但它们有一些重要缺陷。第一,在使用 ContentWebPart 创建 Web Part 时,您无法在多个页面上使用同一个 Web Part(若没有复制和粘贴代码)。第二,您无法轻松地向 ContentWebPart 添加应用程序逻辑。ContentWebPart 最适合显示静态文本,或输出简单控件。(实际上,由于这些缺陷,ASP.NET Whidbey 框架的最终版本可能不会包含 ContentWebPart 控件。)
通常,您可以通过创建 Web User 控件来创建 Web Part。Web User 控件没有上面提到的那些弱点。使用 Web User 控件创建 Web Part 后,您可以在多个页面中重复使用同一个 Web Part。另外,您还可以创建包含重要应用程序逻辑的极为复杂的 Web Part。例如,您可以通过将下列代码存入一个名为 Quotes.ascx 的文件,来创建一个显示随机报价的 Web Part:
void Page_Load() {ArrayList colQuotes = new ArrayList();colQuotes.Add( "Early to bed, early to rise!" );colQuotes.Add( "Look before you leap!" );lblQuote.Text = (string)colQuotes[ new Random().Next(2) ];}
请注意,Quotes Web Part 只是一个标准 Web User 控件。一旦载入 Web User 控件,它将随机显示报价 ArrayList 中的一个报价。
创建 Web Part 的最后一个方法是创建自定义 Web 控件。在您需要隐藏 Web Part 的源代码时,此方法最合适。例如,您可能要创建显示新闻标题的 Web Part。(您可以在 Web Part 中使用 Web 服务,从中央新闻服务器定期检索最新的新闻标题。)此外,您可能要将此控件卖给公司,让它们可以在其 Web 站点主页上显示新闻标题。在这种情况下,您将需要隐藏源代码,并通过创建自定义 Web 控件来创建 Web Part。例如,您可以使用以下代码来创建一个显示新闻 "Rain storm in Seattle!" 的自定义 Web Part:
using System.Web.UI;using System.Web.UI.WebControls;public class NewsWebPart : WebPart {protected override void RenderContents(HtmlTextWriter writer) {writer.Write( "Rain storm in Seattle!" );}}
请注意,通过从基础 WebPart 类中派生来创建自定义的 Web Part。从基础 WebPart 类中派生出控件后,您就可以像创建其他任何自定义 Web 控件一样构建您自己的控件。在此例中,将重写 RenderContents 方法来显示一则新闻。
返回页首
创建门户 Web Part
为简单起见,我们将为 Northwind 的 intranet 门户页面创建三个 Web Part。MotivationWebPart 显示一天内不同时刻的不同动态信息,ProductsWebPart 显示可用产品的列表,EmployeeLookupWebPart 包含一个表单,使您在提供雇员的姓氏后,能够查询雇员的分机号码。
我们将通过创建 Web User 控件(扩展名为 ASCX 的文件)来创建全部三个 Web Part。此外,我们还将利用 Microsoft SQL Server 中包含的示例数据(Northwind 数据库),将它与 Web Part 一起使用。
我们将首先创建 MotivationWebPart。下面的 Web Part 将按小时显示时间和不同的动态信息(见图 2)。

图 2. Motivation Web Part 显示时间和动态信息。
ProductsWebPart 稍微复杂一点。它显示 Northwind Trading Co. 销售的 10 种最贵的产品列表(见图 3)。

图 3. ProductsWebPart 显示 10 种最贵的产品。
ProductsWebPart 是从 ASP.NET Whidbey 框架中的两个新控件创建的;GridView 控件替代了 ASP.NET 1.0 DataGrid 控件;SqlDataSource 控件代表对数据源的连接。当显示 ProductsWebPart 时,将执行 SqlDataSource 控件的 SelectCommand 属性中包含的 SELECT 语句,结果将显示在 GridView 中。
最后一个 Web Part 可使您能够根据雇员的姓氏查询雇员的分机号码(见图 4)。

图 4. EmployeeLookupWebPart 使您能够在给定他/她姓氏的情况下查询雇员的分机。
EmployeeLookup Web Part 可利用 ASP.NET Whidbey 框架中包含的新 DetailsView 控件。此控件可自动显示数据源单一项的内容。在此例中,当用户在 TextBox 控件里输入姓氏后,我们将使用 DetailsView 控件来显示从数据源检索到的 LastName、FirstName 和 Extension 列的值。
请注意 SqlDataSource 控件中包含的 FilterExpression 属性。该属性使您能筛选从 SelectCommand 返回的数据结果。在此例中,我们将筛选结果,以便只返回与用户在 TextBox 控件中输入的姓氏相匹配的记录。
返回页首
将页面划分为 Web Part Zone
现在,我们已为门户应用程序创建了 Web Part,已经可以将它们添加到 Web 页中。向页面添加 Web Part 时,您实际是将 Web Part 添加到称为 Web Part Zone 的区域中。Web Part Zone 是包含 Web Part 集合的页面区域。
第一个 Web Part Zone(名为 Zone1)包含两个 Web Part,即 MotivationWebPart 和 EmployeeLookupWebPart。第二个 Web Part Zone(名为 Zone 2)包含一个 Web Part,即 ProductsWebPart(见图 5)。

图 5. Web Part 出现在 Northwind Trading Co. 页 intranet 门户页面中以正常显示模式显示的两个区域里。
在包含 Web Part 的每个页面中还必须包含另一个控件:WebPartManager 控件。每个包含 Web Part 的每个页面必须包含一个且只有一个 WebPartManager 控件。此控件必须出现在页面中的所有 Web Part Zone之前。WebPartManager 控件负责跟踪页面中所有 Web Part 的状态。此控件在下一部分中对我们很重要。
返回页首
允许自定义 Web Part
到目前为止,您可能在想 Web Part 并不都那么令人兴奋。就这一点来说,我们用 Web Part 完成的一切都能用一般的用户控件完成。那么,有什么值得大惊小怪的呢?
在这部分中,您将学习如何通过让用户个性化定制 Northwind 门户页面,来展现 Web Part 的真正实力。您还要学习如何使用户能够重新布置 Web Part 在页面上的布局,并学习如何使用户从 Web Part 目录中添加新的 Web Part。
允许两种类型的个性化定制的秘密在于 WebPartManager 控件。WebPartManager 控件有一个可影响页面中所有 Web Part 行为的重要属性:DisplayMode 属性。该属性有四个可能的值。Catalog 显示可用 Web Part 的目录,并允许用户重新布置页面上的 Web Part;Design 使用户能重新布置页面上的 Web Part;Edit使用户能编辑个别 Web Part 的属性;Normal 可显示 Web Part,但不允许用户编辑或重新布置页面上的 Web Part(默认模式)。
如果您要用 Web Part 进行有趣的设计,则需要更改 WebPartManager 控件的 DisplayMode 属性。
本文中可下载的代码包含有 Northwind 门户页面的完整代码。Northwind 门户页面包含一个 HTML 表格,将页面分为 3 列。前两列包含的两个 Web Part Zone 已在上一部分中讨论过。第三列包含一个名为 CatalogZone 的新控件。它使您能够显示用户可以添加到页面上的一组 Web Part。例如,在用户关闭 Web Part 之后,仍可将其从 CatalogZone 中添加回页面。
Northwind 门户页面还包含一个标记为 Personalize 的 LinkButton 控件。当用户单击 Personalize 链接时,会执行 PersonalizePage 事件处理程序,且页面模式会更改为 Catalog 模式。在 Catalog 模式下,用户可以个性化定制页面(见图 6)。当用户对页面外观满意后,可以单击 End Personalize,页面会返回到正常显示模式。

图 6. 在 Catalog 显示模式下的 Northwind Trading Co. intranet 门户页面中,用户在将 EmployeeLookupWebPart 从 Zone 1拖动到 Zone 2。
在当前版本的 Web Part 框架中,匿名用户执行的任何个性化定制均以视图状态保存。这意味着,当匿名用户离开页面后会丢失他所作的所有更改。(此行为在框架的最终版本发布前可能有变动。)
在另一方面,如果用户是经验证的用户(例如,通过使用 Forms Authentication 对他进行了验证),则他所作的任何更改将会保存下来。这意味着,如果经验证的用户使用 Web Part 对页面的内容和布局进行更改,当他返回应用程序后,这些更改仍将保留。
Web Part 框架有许多激动人心的功能,这里无法一一尽数。例如,框架包含若干个能使用户编辑 Web Part 属性的控件。它还支持从一个页面导出 Web Part,并将其导入另一个页面。
关于作者
Stephen Walther 著有 ASP.NET 方面的畅销书籍 ASP.NET Unleashed。他还是 ASP.NET Community Starter Kit(由 Microsoft 开发的 ASP.NET 示例应用程序)的架构师和首席开发人员。他通过公司的 Superexpert 为全美多家公司提供了 ASP.NET 的培训,包括 NASA 和 Microsoft。请参阅Active Server Pages Training。
本文最初发表在 2003 年 12 月的asp.netPRO Magazine 上,经出版人员的允许再版。
转到原英文页面