Partilhar via


Demonstra Passo a passo: Implementando a personalização de Web Parts usando IPersonalizable

Esta explicação passo a passo demonstra como fornecer um padrão de valores específicos de usuário pela implementação de um controle de usuário que pode ser tratado como um controle Web Parts personalizável.

A característica mais significativa desse controle é que as suas propriedades personalizáveis são armazenadas em tipos de variáveis sem-valor.Nesse caso, os valores são armazenados em um controle BulletedList.Isso significa que o sistema não tem conhecimento de quando o usuário altera os valores na lista.Essa explicação passo a passo demonstra como informar ao sistema que os valores são alterados para que eles possam ser preservados para uso futuro.Isso pode ser útil se você estiver criando formulários on-line customizáveis em uma base por usuário.Personalização de Web Parts permite que o sistema reconheça o usuário para que seus valores padrão de formulário possam ser restaurados automaticamente em visitas subsequentes para o site.

Observação:

O controle de usuário que você criar nessa explicação não herda da classe WebPart; No entanto, um controle de usuário pode funcionar como um controle WebPart.Durante essa explicação, você adiciona um controle de usuário a uma zona WebPartZoneBase.Isso permite que o ASP.NET transforme o controle de usuário em um controle GenericWebPart.The user control will then work like any other WebPart control, and will allow you to explore personalization.

Durante este explicação passo a passo, você aprenderá como:

  • Criar um controle de usuário com propriedades personalizáveis cujos valores podem ser salvos em armazenamentos de longo prazo.

  • Exibir valores padrão específicos do usuário.

  • Work with the user control in a zone as a true WebPart control.

Observação:

This type of application could be developed using ASP.NET profiles.However, in this case you are not storing information about the user to be reused across an entire application, as in a shopping cart application.Instead, you are saving user-specific preferences or settings for each control, on a per-page basis.For more information about profiles, see Visão geral sobre propriedades de perfil do ASP.NET.

Pré-requisitos

Para concluir esta explicação passo a passo, será necessário:

  • Internet Information Services (IIS) instalado e configurado no computador que hospedará o site.Para obter mais informações sobre como instalar e configurar o Serviços de Informações da Internet, consulte a documentação de Ajuda do Serviços de Informações da Internet incluída incluída na instalação ou consulte a documentação do Serviços de Informações da Internet online no site Microsoft TechNet (Serviços de Informações da Internet 6.0 recursos técnicos).

  • Um site da Web ASP.NET que possa identificar usuários individuais.Se você tiver um site já configurado, você pode usar esse site como um ponto de partida para este explicação passo a passo.De outro modo, para mais informações sobre como criar um site ou diretório virtual, consulte Como: Criar e configurar diretórios virtual no IIS 5.0 e 6.0.

  • Um provedor de personalização configurado e um banco de dados.Personalização de Web Parts está abilitada por padrão e usa o provedor de personalização SQL (SqlPersonalizationProvider) junto com o Microsoft SQL Server Express Edition (SSE) para armazenar os dados de personalização.This walkthrough uses SSE and the default SQL provider.Se você tiver o SSE instalado, nenhuma configuração será necessária.SSE está disponível com Microsoft Visual Studio 2005 sistema autônomo uma parte opcional da instalação ou sistema autônomo um baixar gratuito de Microsoft.com. To use one of the full versions of SQL Server, you must install and configure an ASP.NET application services database, and configure the SQL personalization provider to connect to that database.Para obter mais informações, consulte Criando e Configurando o Banco de Dados dos Serviços de Aplicativos para o SQL Server.Você também pode criar e configurar um provedor personalizado para uso com outros bancos de dados não SQL ou soluções de armazenamento.Para mais informações e um exemplo de código, consulte Implementando um Provedor de Associação.

Criando um Controle de Usuário Personalizável que contém variáveis do tipo referência.

Nesta parte da explicação, você cria um controle de usuário que permite que você digite um nome amigável e uma URL para um web site.Quando você clica no botão Save, o nome amigável é adicionado ao controle BulletedList.Esses valores são armazenados pelo recurso de personalização de Web Parts em uma base por usuário.Sempre que o usuário acessa o controle vindo de outra página ou em uma nova sessão, o sistema exibe os valores salvos BulletedList.

Observação:

Você não precisa permitir personalização de Web Parts; ela é ativada por padrão.Para obter mais informações sobre serialização, consulte Visão geral sobre personalização de Web Parts.

Para criar o controle de usuário personalizável

  1. Em um editor de texto, crie um novo arquivo para conter o controle de usuário, nomeie-o UrlList.ascx e salve-o no seu diretório Web.O código que implementa o comportamento do controle está contido em um arquivo separado, como mostrado no passo 4.

  2. No novo arquivo, adicione uma diretiva de controle de linguagem de programação que você está usando, como mostrado no exemplo a seguir.

    <%@ Control Language="VB" AutoEventWireup="false"  
    CodeFile="UrlList.ascx.vb" Inherits="WebParts_UrlList" %>
    
    <%@ Control Language="C#" AutoEventWireup="true" 
    CodeFile="UrlList.ascx.cs" Inherits="WebParts_UrlList" %>
    
  3. Abaixo da diretiva, adicione os elementos a seguir para representar a interface de usuário (UI) do controle.

    <table>
    
    <tr>
        <td> 
            <asp:Label ID="NameLabelID" Text="Name: "  />
        </td>
        <td>
            <asp:TextBox ID="NameTextBoxID"  />
        </td>
    </tr>
    
    <tr>
        <td>
            <asp:Label ID="UrlLabelID1" Text="Url:  "  />
        </td>
        <td>
            <asp:TextBox ID="UrlTextBoxID"  />
        </td>
    </tr>
    
    <tr>
        <td>
            <asp:Button ID="SaveID"  
                OnClick="SaveButton_Click" Text="Save" />
        </td>
        <td>
            <asp:Button ID="ResetID"  
                OnClick="ResetButton_Click" Text="Reset" />
        </td>
    </tr>
    
    </table>
    
    <div>
         // This is the complex variable whose status 
         // must be preserved.
        <asp:BulletedList 
            ID="BulletedListID" 
            DisplayMode="HyperLink"  Target="_blank" />
    
    </div>
    
  4. Crie um novo arquivo para atuar como arquivo complementar e adicione a ele o seguinte código.O exemplo a seguir representa o arquivo complementar (UrlList.ascx.vb ou UrlList.ascx.cs, dependendo do idioma que você estiver usando) que implementa o comportamento do referido controle UrlList.ascx.Esse código está dividido em duas partes.Uma parte contém o código que manipula a entrada do usuário e o evento de carga da página; a outra contém o código que implementa a interface IPersonalizable.Isso permite que a preservação dos valores BulletedList -- ou seja, a personalização do controle de usuário.Este exemplo implementa os membros de interface Load, Save e IsDirty.

    ' UrlList.ascx.vb
    Imports System
    Imports System.Collections
    Imports System.Web
    Imports System.Web.UI
    Imports System.Web.UI.WebControls
    Imports System.Web.UI.WebControls.WebParts
    
    Partial Class WebParts_VB_UrlList
        Inherits System.Web.UI.UserControl
        Implements IPersonalizable
    
        Private _userUrls As ArrayList
        Private _listDirty As Boolean
    
        ' This code implements the IPersonalizable members.
    
        Public Overridable ReadOnly Property IsDirty() As Boolean _
        Implements System.Web.UI.WebControls.WebParts.IPersonalizable.IsDirty
    
            Get
                Return _listDirty
            End Get
        End Property
    
    
        Public Overridable Shadows Sub Load(ByVal state As PersonalizationDictionary) _
        Implements System.Web.UI.WebControls.WebParts.IPersonalizable.Load
    
    
            If Not (state Is Nothing) Then
    
                Dim userUrlsEntry As PersonalizationEntry = state("userUrls")
                If Not (userUrlsEntry Is Nothing) Then
                    _userUrls = CType(userUrlsEntry.Value, ArrayList)
                End If
            End If
    
        End Sub 'Load
    
        Public Overridable Sub Save(ByVal state As PersonalizationDictionary) _
          Implements System.Web.UI.WebControls.WebParts.IPersonalizable.Save
    
            If Not (_userUrls Is Nothing) AndAlso _userUrls.Count <> 0 Then
                state("userUrls") = New PersonalizationEntry(_userUrls, _
                PersonalizationScope.User)
            End If
    
        End Sub
    
        ' This code handles the user's input.
        Protected Sub SaveButton_Click(ByVal sender As Object, _
        ByVal e As EventArgs)
    
            Dim name As String = NameTextBoxID.Text.Trim()
            Dim url As String = UrlTextBoxID.Text.Trim()
    
            Dim p As New Pair(name, url)
    
            If _userUrls Is Nothing Then
                _userUrls = New ArrayList()
            End If
            _userUrls.Add(p)
    
            BulletedListID.Items.Add(New ListItem(CStr(p.First), _
            CStr(p.Second)))
    
            _listDirty = True
    
        End Sub 'SaveButton_Click
    
    
        Protected Sub ResetButton_Click(ByVal sender As Object, _
        ByVal e As EventArgs)
    
            _userUrls = New ArrayList()
    
             BulletedListID.Items.Clear()
    
            _listDirty = True
    
        End Sub 'ResetButton_Click 
    
    
        Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As EventArgs)
            If Not (_userUrls Is Nothing) Then
                BulletedListID.Items.Clear()
                Dim p As Pair
                For Each p In _userUrls
                    BulletedListID.Items.Add(New _
                    ListItem(CStr(p.First), CStr(p.Second)))
                Next p
            End If
    
        End Sub 'Page_Load
    
    End Class
    
    // UrlList.ascx.cs
    using System;
    using System.Collections;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    
    public partial class WebParts_UrlList : System.Web.UI.UserControl, 
        IPersonalizable
    {
        private ArrayList _userUrls;
        private bool _listDirty;
    
           // This code implements the IPersonalizable members.
    
        public new void Load(PersonalizationDictionary state)
        {
            if (state != null)
            {
    
                PersonalizationEntry userUrlsEntry = state["userUrls"];
                if (userUrlsEntry != null)
                {
                    _userUrls = (ArrayList)userUrlsEntry.Value;
                }
    
            }
        }
    
        public void Save(PersonalizationDictionary state)
        {
    
            if ((_userUrls != null) && (_userUrls.Count != 0))
            {
                state["userUrls"] =
                    new PersonalizationEntry(_userUrls, PersonalizationScope.User);
            }
    
        }
    
        public virtual bool IsDirty
        {
            get
            {
                return _listDirty;
            }
        }
    
           // This code handles the user's input.
    
        protected void Page_Load(object sender, EventArgs e)
        {
            if (_userUrls != null)
            {
                BulletedListID.Items.Clear();
                foreach (Pair p in _userUrls)
                {
                    BulletedListID.Items.Add(
                        new ListItem((string)p.First, (string)p.Second));
                }
            }
    
        }
    
        protected void SaveButton_Click(object sender, EventArgs e)
        {
            string name = NameTextBoxID.Text.Trim();
            string url = UrlTextBoxID.Text.Trim();
    
            Pair p = new Pair(name, url);
    
            if (_userUrls == null)
            {
                _userUrls = new ArrayList();
            }
            _userUrls.Add(p);
    
            BulletedListID.Items.Add(
                    new ListItem((string)p.First, (string)p.Second));
    
            _listDirty = true;
        }
    
    
        protected void ResetButton_Click(object sender, EventArgs e)
        {
    
            _userUrls = new ArrayList();
    
             BulletedListID.Items.Clear();
    
            _listDirty = true;
    
        }
    
    } 
    
  5. Nomeie o arquivo UrlList.ascx.vb ou UrlList.ascx.cs (dependendo de qual linguagem você estiver usando), e salve-o no diretório raiz do seu site.

    Observação de segurança:

    Esse controle tem um caixa de texto que aceita entrada pelo usuário, que é uma ameaça potencial de segurança.A entrada do usuário em uma página da Web pode conter script de cliente mal-intencionado.Por padrão, páginas da Web ASP.NET validam a entrada do usuário para garantir que a entrada não contenha elementos HTML ou script.Contanto que essa validação esteja ativada, não é preciso explicitamente verificar script ou elementos HTML na entrada do usuário.Para obter mais informações, consulte Visão Geral de Scripts Maliciosos.

Referenciando o Controle do Usuário como um Controle Web Parts

Agora que você criou um controle de usuário com propriedades personalizáveis, você pode criar um página de Web Forms para hospedar o controle de usuário como um controle Web Parts.

Observação:

Você deve hospedar o controle como controle de Web Parts para a personalização funcionar.

Para fazer referência ao controle de usuário como um controle Web Parts

  1. Em um editor de texto, crie um novo arquivo.Adicione uma declaração de página ao início do arquivo, como mostrado no exemplo a seguir.

    <%@ page language="VB" %>
    
    <%@ page language="C#" %>
    
  2. Sob a declaração page, adicione uma declaração para fazer referência ao controle de usuário que você criou anteriormente, conforme mostrado no exemplo a seguir.

    <%@ Register tagprefix="UserControl" tagname="UrlList" 
    src="UrlList.ascx" %>
    
    <%@ Register tagprefix="UserControl" tagname="UrlList" 
    src="UrlList.ascx" %>
    
  3. Sob a referência de controle, adicione a seguinte estrutura de página básica para hospedar o controle de usuário como um controle Web Parts.

    Observação:

    Para que o controle de usuário funcione como controle de Web Parts, a página deve conter um elemento <asp:webpartmanager>, e o controle de usuário deve estar contido dentro de um elemento <asp:webpartzone> e um elemento <zonetemplate> em sucessão, como mostra a exemplo a seguir.

    <html>
    <head >
        <title>Personalizable User Control</title>
    </head>
    <body>
        <form id="form1" >
          <asp:WebPartManager ID="mgr"  />
            <div>
              <asp:WebPartZone ID="WebPartZone1" >
                <ZoneTemplate>
                  < UserControl:UrlList ID="AccUserID" 
                    title="URL List WebPart" />  
                </ZoneTemplate>
              </asp:WebPartZone>
            </div>    
        </form>
    </body>
    </html>
    
  4. Nomeie o arquivo UrlList.aspx e salve-o no mesmo diretório do controle de usuário.

    Você criou agora um controle de usuário personalizável, e referenciou-o como um controle Web Parts em um página de Web Forms.

A etapa final é testar seu controle de usuário.

Para testar o controle de usuário personalizável

  1. Carregue a página UrlList.aspx no navegador.

  2. Insira valores nos campos Name e Phone, e clique no botão Save Form Values.

  3. Feche o navegador.

  4. Carregue a página novamente em um navegador.

    Os valores que você inseriu anteriormente devem aparecer no formulário.Estes são os valores que foram salvos no controle BulletedList, e que foram restaurados do banco de dados quando você recarregou a página no navegador.

  5. Digite os novos valores no formulário, mas não clique no botão para salvá-los.Feche o navegador.

  6. Carregue a página novamente em um navegador.Os valores originais que você inseriu e salvou nas propriedades personalizadas devem ser aqueles que reaparecem no formulário.

Próximas etapas

Esta explicação passo a passo demonstrou as tarefas básicas envolvidas na criação de um controle de usuário com propriedades personalizáveis.Você criou um controle que permite que você salve configurações específicas de usuário para a página e controles específicos, e exiba as configurações salvas quando o usuário revisitar a página em uma nova sessão do navegador.Sugestões para explorações adicionais incluem:

Consulte também

Conceitos

Visão geral sobre Web Parts do ASP.NET

Visão geral sobre personalização de Web Parts