演练:使用用户控件实现 Web 部件个性化设置

更新:2007 年 11 月

本演练演示如何创建 ASP.NET 用户控件,该控件根据 Web 部件个性化设置在网页上提供用户特定的默认值。

ASP.NET Web 部件使您可以生成具有模块化布局的网页,以便用户可以根据他们的喜好修改网页的外观和内容。Web 部件有一项主要功能称为“个性化设置”,它允许您保存每个页面的用户特定设置并在将来的浏览器会话中重用这些设置。

通过使用 Web 部件和个性化设置,您可以生成包含一项对许多 Web 应用程序都有用的功能的网页:即可以在窗体中提供用户特定的默认值。本演练演示如何通过实现用户控件(用户控件可以被视为可个性化的 Web 部件控件)提供用户特定的默认值。例如,当您为客户服务代理创建用于填写联机窗体的应用程序时,此开发方法可能很有用。Web 部件和个性化设置功能使您的页面能够识别每个代理。用户控件允许每个代理为窗体上的字段保存默认值,然后在以后访问该页时会自动填写这些默认值。

784d8z92.alert_note(zh-cn,VS.90).gif说明:

您在本演练中创建的用户控件不是从 WebPart 类继承的控件。但在本演练中,您将了解到用户控件可以作为 WebPart 控件使用。在本演练过程中,会将用户控件添加到一个 WebPartZoneBase 区域。这样做使 ASP.NET 能够将该用户控件包装在 GenericWebPart 控件中。然后,该用户控件便可以像任何其他的 WebPart 控件一样工作,并且使您可以利用个性化设置。

通过此演练,您将学会如何执行以下任务:

  • 创建具有可个性化的属性的用户控件,这些属性的值可以保存在长期存储中。

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

  • 在区域中将用户控件作为真正的 WebPart 控件使用。

    784d8z92.alert_note(zh-cn,VS.90).gif说明:

    可以使用 ASP.NET 配置文件开发此类应用程序。但在这种情况下,您将不存储要在整个应用程序中(如在购物车应用程序中)重用的用户相关信息。相反,您将为每个控件逐页保存用户特定的首选项或设置。有关配置文件的更多信息,请参见 ASP.NET 配置文件属性概述

先决条件

若要完成本演练,您需要:

  • 已在将承载该站点的计算机上安装和配置的 Internet 信息服务 (IIS)。有关安装和配置 IIS 的详细信息,请参见安装中附带的 IIS 帮助文档,或者参见 Microsoft TechNet 网站(“Internet Information Services 6.0 Technical Resources”(Internet 信息服务 6.0 技术资源))上的联机 IIS 文档。

  • 可识别单个用户的 ASP.NET 网站。如果已经配置了这样的站点,则可以将该站点用作本演练的起始点。否则,若要查看有关创建虚拟目录或站点的详细信息,请参见 如何:在 IIS 5.0 和 6.0 中创建和配置虚拟目录

  • 已配置的个性化设置提供程序和数据库。Web 部件个性化设置默认情况下是启用的,它使用 SQL 个性化设置提供程序 (SqlPersonalizationProvider) 以及 Microsoft SQL Server Standard Edition 存储个性化设置数据。本演练使用 SSE 和默认的 SQL 提供程序。如果安装了 SSE,则不需要进行任何配置。SSE 是作为 Microsoft Visual Studio 2005 安装的可选部分提供的,也可以免费下载。有关详细信息,请参见 Microsoft SQ 网页。若要使用 SQL Server 的一个完整版本,必须安装和配置 ASP.NET 应用程序服务数据库,并且将 SQL 个性化设置提供程序配置为连接到该数据库。有关详细信息,请参见为 SQL Server 创建和配置应用程序服务数据库。还可以创建和配置自定义提供程序来使用其他非 SQL 数据库或存储解决方案。有关详细信息和代码示例,请参见实现成员资格提供程序

创建可个性化的用户控件

在这部分演练中,将创建一个为代理信息窗体提供用户界面 (UI) 的用户控件。该控件还将公开姓名和电话信息的可个性化属性。

784d8z92.alert_note(zh-cn,VS.90).gif说明:

不需要启用 Web 部件个性化设置;默认情况下已启用它。有关个性化设置的更多信息,请参见 Web 部件个性化设置概述

为用户控件创建可个性化的属性

  1. 在文本编辑器中创建一个新文件,并在该文件的开头添加以下带有 <script> 开始和结束标记的控件声明:

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

    784d8z92.alert_note(zh-cn,VS.90).gif说明:

    每个属性 (Property) 都有一个 Personalizable 属性 (Attribute)。这使 Web 部件个性化设置能够将属性值存储在数据库中。

      <Personalizable()> _
      Property UserName() As String
    
        Get
          If Textbox1.Text Is Nothing Or Textbox1.Text.Length < 0 Then
              Return String.Empty
          Else
              Return Textbox1.Text
          End If
        End Get
    
        Set(ByVal value As String)
          Textbox1.Text = value
        End Set
    
      End Property
    
      <Personalizable()> _
      Property Phone() As String
    
        Get
          If Textbox2.Text Is Nothing Or Textbox2.Text.Length < 0 Then
              Return String.Empty
          Else
              Return Textbox2.Text
          End If
        End Get
    
        Set(ByVal value As String)
          Textbox2.Text = value
        End Set
    
      End Property
    
      [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;
        }
      }
    
    784d8z92.alert_security(zh-cn,VS.90).gif安全说明:

    该控件具有一个文本框,用于接受用户输入,这是一个潜在的安全威胁。默认情况下,ASP.NET 网页验证用户输入,以确保输入中不包含 HTML 元素或脚本。有关更多信息,请参见脚本侵入概述

  3. 将该文件命名为 AccountUserControlCS.ascx 或 AccountUserControlVB.ascx(具体取决于所使用的语言),并保存在网站的根目录中。

既然已经添加可个性化的属性来保存默认值,您即可将用户界面控件添加到用户控件以显示用户的姓名和电话号码。

向用户控件添加用户界面控件

  1. 在 <script> 标记的下面,添加一个 Label 控件和一个 TextBox 控件来包含用户的姓名,并使用 <div> 标记包装这两个控件,如下面的代码示例所示:

    <div>
    <asp:label id="Label1" runat="server">Name</asp:label>
    <asp:textbox id="Textbox1" runat="server" />
    </div>
    
  2. 在刚添加的控件下面,添加一个 Label 控件和一个 TextBox 控件来包含用户的电话号码,并使用 <div> 标记包装这两个控件,如下面的示例所示:

    <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 部件控件引用

既然已经创建了一个具有可个性化属性的用户控件,您即可创建一个 ASP.NET 网页,以将该用户控件作为 Web 部件控件承载。为了能够使用个性化设置功能,必须将该控件作为 Web 部件控件承载。

将用户控件作为 Web 部件控件引用

  1. 在文本编辑器中,创建一个新文件并将下面的页声明添加到该文件的开头:

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

    <%@ register tagprefix="uc1" 
        tagname="AccountUserControl" 
        src="AccountUserControlvb.ascx"%>
    
    <%@ register tagprefix="uc1" 
        tagname="AccountUserControl" 
        src="AccountUserControlcs.ascx"%>
    
  3. 在控件引用下面,添加下面的基本页结构,将用户控件作为 Web 部件控件承载。

    784d8z92.alert_note(zh-cn,VS.90).gif说明:

    为了能够将用户控件作为 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. 在**“姓名”“电话”**字段中输入值,再单击“保存窗体值”按钮。

  3. 关闭浏览器。

  4. 在浏览器中再次加载页。

    您之前输入的值显示在窗体中。这些值是保存在可个性化属性中的值,当您在浏览器中重新加载该页时,便从数据库中还原了这些值。

  5. 在窗体中输入新值,但不要单击该按钮保存新值。

  6. 关闭浏览器。

  7. 在浏览器中再次加载页。

    由于您没有保存新值,因此重新显示在窗体中的值是您输入并保存到个性化设置属性中的原始值。

后续步骤

本演练演示了创建具有可个性化属性的用户控件的基本任务。您所创建的控件允许您保存特定控件和页面的用户特定设置,并会在用户通过新的浏览器会话重新访问该页时显示这些已保存的设置。如需进一步探究此问题,我们建议:

请参见

概念

ASP.NET Web 部件概述

Web 部件个性化设置概述