ASP.NET Lab

The Best Web, The Best Future

博客园 首页 新随笔 订阅 管理

这个实践示范了如何创建依赖于 Web 部件个性化的 ASP.NET 用户控件,并在 Web 页面中提供用户特定的默认值。

ASP.NET Web 部件控件集允许你建立拥有模块化布局的 Web 页面,并且允许用户按照自己的偏好来更改外观和内容。一个关键的 Web 部件特征,也就是常说的个性化,允许你为每个页面保存用户特定的设定以便在未来的浏览器会话中重用这些设定。

使用 Web 部件和个性化,你可以为多数 Web 应用程序建立包括一个有用特征的 Web 页面:在窗体中提供给用户特定的默认值的能力。这个实践示范了如何实现一个可以当成可个性化 Web 部件控件使用的用户控件来提供给用户特定的默认值。这种开发方式在你创建控件的时候是有用的,例如,某个为客户服务代理填写在线窗体的应用程序。Web 部件和个性化能力允许你的页面认可每一个代理。用户控件允许每个代理保存窗体字段中的默认值,并且默认值能够被自动填充到页面的后续访问中。

提示:你在这个实践中所创建的用户控件并没有继承自 WebPart 类。但是在这个实践中你将学习到用户控件可以模拟成一个 WebPart 控件。在该实践中,你将把这个用户控件添加到一个 WebPartZoneBase 区域中。这样做允许 ASP.NET 在一个 GenericWebPart 控件中封装该用户控件。然后这个用户控件将会变得像其他任何一个 WebPart 控件一样,帮助你探索个性化。

在这个实践中,你将学习到:

  • 创建一个用户控件,该控件的属性能够被个性化,并且属性的值能够被长期保存。

  • 在 Web 页面的窗体中显示用户特定的默认值。

  • 在一个真正的 WebPart 控件区域中使用用户控件。

提示:尽管使用 ASP.NET 档案能够开发这种类型的应用程序。但是,在这个实践中你不需要为了在整个应用程序中重用而保存用户的相关信息。相反,你会在每个页面的基础上为每个控件保存用户特定的偏好设置。更多关于档案的信息,请参考“ASP.NET 档案属性概览”。

先决条件

要完成这个实践,你需要:

  • 在计算机中安装并配置将要托管网站的 Internet 信息服务(IIS)。关于 IIS 的安装与配置的详细内容,请参考 IIS 帮助文件,或者参考 Microsoft TechNet 网站(Internet 信息服务 6.0 技术资源)中的在线 IIS 文档。

  • 一个能够识别单独用户的 ASP.NET Web 网站。如果你已经有这样的一个已配置网站,你可以把它当成这个实践的开始。如果没有,关于创建虚拟目录或网站的详细内容,请参考“ASP.NET 实践:在 IIS 中创建并配置虚拟目录”。

  • 一个已配置的个性化提供者和数据库。Web 部件的个性化默认时是被启用的,并且它使用 Microsoft SQL Server 标准版的 SQL 个性化提供者(SqlPersonalizationProvider)来保存个性化数据。该实践使用了 SSE 和默认的 SQL 提供者。如果你已经安装 SSE,则不需要进行额外的配置。SSE 是作为 Micrisoft Visual Studio 2005 的一个可选部分被安装的,或者也可以从 Microsoft.com 上下载。要使用一种完整版本的 SQL Server,你必须安装并配置一个 ASP.NET 应用程序服务数据库,并且配置 SQL 个性化提供者来连接到这个数据库。关于详细内容,请参考“为 SQL Server 创建并配置应用程序服务数据库”。你也可以创建并配置一个自定义的提供者来使用其他的非 SQL 数据库或者存储方案。关于详细内容和代码实例请参考“实现成员资格提供者”。

创建一个可个性化的用户控件

在这个部分,你将创建一个为代理信息窗体而提供用户界面(UI)的用户控件。这个控件同样为名称和电话信息暴露了可个性化的属性。

提示:你不需要手动启用 Web 部件的个性化;默认时它已经是被启用的。更多关于个性化的信息,请参考“Web 部件个性化概览”。

如何为用户控件创建可个性化的属性
  1. 在文本编辑器中,创建一个新文件。添加下列控件声明到文件的开始部分,连同一个 <script> 标记对一起。你的代码看起来应该像下列代码实例。

    <%@ control language="C#" classname="AccountUserControl" %>
    <script runat="server">
    </script>
    
  2. <script> 标记中,添加代码来创建两个可个性化的属性:一个命名为 UserName,另一个命名为 Phone,如下列实例所示。

    提示:每个属性都使用了一个 Personalizable 参数。这个参数允许 Web 部件个性化在提供者的数据库中保存属性的值。

      [Personalizable]
      public string UserName
      {
        get
        {
          if(Textbox1.Text == null | Textbox1.Text.Length < 0)
            return String.Empty;
          else
            return Textbox1.Text;
        }
        
        set
        {
          Textbox1.Text = value;
        }
      }
        
      [Personalizable]
      public string Phone
      {
        get
        {
          if(Textbox2.Text == null | Textbox2.Text.Length < 0)
            return String.Empty;
          else
            return Textbox2.Text;
        }
        
        set
        {
          Textbox2.Text = value;
        }
      }
    
  3. 把文件命名为 AccountUserControlCS.aspx 或 AccountUserControlVB.ascx(取决于你使用的编程语言),并把它保存到网站的根目录。

    安全提示:这个控件中有一个接受用户输入的文本输入框,这存在一个潜在的安全隐患。Web 页面中的用户输入能够潜在地包含有恶意的客户端脚本。默认时,ASP.NET Web 页面会检查用户输入以确保输入不包含 HTML 元素或脚本。只要该验证被启用,你就不需要明确地在用户输入中检查脚本或 HTML 元素。更多信息,请参考“脚本开发概览”。

现在你已经添加了用来保存默认值的可个性化属性,你可以为用户控件添加 UI 控件来显示用户的名称和电话号码。

如何为用户控件添加 UI 控件
  1. <script> 标记的下面,添加被 <div> 标记包围的一个 Label 控件和一个 TextBox 控件来包含用户的名称,如下列代码实例所示。

    <div>
    <asp:label id="Label1" runat="server">Name</asp:label>
    <asp:textbox id="Textbox1" runat="server" />
    </div>
    
  2. 在刚才添加的控件下面,添加被 <div> 标记包围的一个 Label 控件生个 TextBox 控件来包含用户的电话号码,如下面所示。

    <div>
    <asp:label id="Label2" runat="server">Phone</asp:label>
    <asp:textbox id="Textbox2" runat="server" />
    </div>
    
  3. 在刚才添加的控件下面,添加一个被 <div> 标记包围的 <Asp:Button> 元素,用于在执行回传的时候保存用户的信息。你的代码看起来应该像下列实例。

    <div>
    <asp:button id="Button1" runat="server" 
      text="Save Form Values" />
    </div>
    
  4. 保存文件。

把用户控件当成 Web 部件控件来引用

现在你已经创建了一个包含可个性化属性的用户控件,现在你可以创建一个 Web 窗体页面并把这个用户界面当成 Web 部件控件来托管。把控件当成 Web 部件控件来托管是个性化特征能够正常工作所必需的。

如何把用户控件当成 Web 部件控件来引用
  1. 在文本编辑器中,创建一个新文件。添加下列页面声明到文件的开始部分。

    <%@ page language="C#" %>
    
  2. 在页面声明的下面,添加一个声明来引用你在前面所创建的用户控件,如下列实例所示。

    <%@ register tagprefix="uc1" 
        tagname="AccountUserControl" 
        src="AccountUserControlcs.ascx"%>
    
  3. 在控件的引用下面,添加下列基本页面结构以把用户控件当成 Web 部件控件来托管。

    提示:要让用户控件像 Web 部件控件那样工作,页面必须包含一个 <Asp:WebPartManager> 元素,并且用户控件必须包含在 <Asp:WebPartZone> 元素的某个 <ZoneTemplate> 元素中,如下列代码实例所示。

    <html>
    <head runat="server">
        <title>Personalizable User Control</title>
    </head>
    <body>
        <form id="form1" runat="server">
          <asp:webpartmanager id="WebPartManager1" runat="server"  />
          <asp:webpartzone id="zone1" runat="server" headertext="Main">
            <zonetemplate>
              <uc1:AccountUserControl 
                runat="server" 
                id="accountwebpart"
                title="Agent Information" /> 
            </zonetemplate>
          </asp:webpartzone>
        </form>
    </body>
    </html>
    
  4. 把文件命名为 HostAccountControl.aspx 并保存到与前面的用户控件相同的目录中。

    你现在已经创建了一个可以个性化的用户控件,并且在一个 Web 窗体页面中把它当成 Web 部件控件来进行引用。

最后的步骤就是测试你的控件。

如何测试可个性化的用户控件
  1. 在浏览器中载入 HostAccountControl.aspx。

  2. 在 Name 和 Phone 字段中输入值,并单击 Save Form Values 按钮。

  3. 关闭浏览器。

  4. 在浏览器中重新载入该页面。

    你在前面输入的值应该会在窗体中出现。这些值被保存在可个性化的属性中,并且当你重新在浏览器中载入该页面的时候会从数据库中被恢复。

  5. 在窗体中输入新的值,但是不单击按钮来保存它们。然后关闭浏览器。

  6. 在浏览器中重新载入该页面。你最初输入并保存在可个性化属性中的值仍然出现在窗体中。

余下的步骤

这个实践已经演示了创建拥有可个性化参数的用户控件时的相关基本任务。你创建了一个能够允许你为特定控件或者页面中的用户设定进行保存的控件,并且在用户在新的浏览器会话中重新访问页面的时候显示这些被保存的设定。

附加的探索建议包括:

  • 研究其他创建 Web 部件页面的相关组件。相关介绍,请参考“ASP.NET 实践:创建 Web 部件页面”。

  • 学习更多关于用户控件的使用。详细内容,请参考“ASP.NET 用户控件概览”。

  • 学习如何创建你自己的自定义 Web 部件控件,以提供比用户控件和所有拥有 Web 部件特征的控件还要更多的可编程控件。更多信息,请参考“ASP.NET 实践:把用户控件视为 Web 部件控件”。

posted on 2007-01-02 20:46  Laeb  阅读(448)  评论(0编辑  收藏  举报