Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

ImportCatalogPart-Klasse

Aktualisiert: November 2007

Importiert eine Beschreibungsdatei für ein WebPart-Steuerelement (oder ein anderes als WebPart-Steuerelement verwendetes ASP.NET-Serversteuerelement), sodass Benutzer das Steuerelement mit vorher festgelegten Einstellungen zu einer Webseite hinzufügen können. Diese Klasse kann nicht geerbt werden.

Namespace:  System.Web.UI.WebControls.WebParts
Assembly:  System.Web (in System.Web.dll)

[AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public sealed class ImportCatalogPart : CatalogPart
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal) */
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal) */
public final class ImportCatalogPart extends CatalogPart
public final class ImportCatalogPart extends CatalogPart
<asp:ImportCatalogPart />

Das ImportCatalogPart-Steuerelement ermöglicht es Benutzern, eine Beschreibungsdatei zu importieren, die Einstellungen für ein WebPart-Steuerelement oder Serversteuerelement beschreibt, das ein Benutzer einer WebPartZoneBase-Zone hinzufügen möchte.

Nach dem Import einer Beschreibungsdatei wird das WebPart-Steuerelement, auf das in der Datei verwiesen wird, im ImportCatalogPart-Steuerelement angezeigt, und der Benutzer kann es der Seite hinzufügen.

Die Beschreibungsdatei ist nicht mit dem Steuerelement selbst identisch. Es handelt sich um eine XML-Datei mit der Erweiterung .WebPart, die Name-Wert-Paare (hauptsächlich Eigenschaftenwerte) enthält, die den Zustand des Steuerelements beschreiben. Die Beschreibungsdatei wird entsprechend einem angegebenen XML-Format erstellt. Informationen hierzu finden Sie im Thema Beschreibungsdateien für Webparts-Steuerelemente.

Das Steuerelement, auf das von der Beschreibungsdatei verwiesen wird, kann entweder in eine Assembly kompiliert werden oder kann ein in einer ASCX-Datei definiertes Benutzersteuerelement sein. In beiden Fällen muss das Steuerelement, auf das in einer importierten Beschreibungsdatei verwiesen wird, sich auf dem Webserver befinden, der die Seite hostet und der versucht, das Steuerelement zu importieren. Die Beschreibungsdatei verweist auf den Namen des Steuerelements und die Assembly (oder Datei), die das Steuerelement enthält. Sie enthält Einstellungen, die sich auf die Eigenschaftenwerte, die Darstellung und das Verhalten des Steuerelements auswirken.

Das ImportCatalogPart-Steuerelement ermöglicht Benutzern die gemeinsame Nutzung von Einstellungen für Steuerelemente. Ein komplexes Steuerelement kann viele Eigenschaften und Einstellungen umfassen. Auf einer typischen Intranetsite eines großen Unternehmens kann ein benutzerdefiniertes WebPart-Steuerelement beispielsweise eine Reihe von Eigenschaften mit spezifischen Werten für die Umgebung der Benutzer enthalten, z. B. Datenbankverbindungen, Abteilungsinformationen usw. Das Steuerelement kann auch eine Reihe von Eigenschaften enthalten, die die Darstellung beeinflussen. Ein Benutzer kann das Steuerelement auf einer bestimmten Site personalisieren und so konfigurieren, dass es korrekt funktioniert, eine Beschreibungsdatei für das Steuerelement exportieren und die Beschreibungsdatei dann für andere Benutzer freigeben. Diese können sie importieren, um das vollständig konfigurierte Steuerelement anderen Intranetsites hinzuzufügen, für die sie die Berechtigung zur Personalisierung besitzen. Solange sich die kompilierte Assembly oder die Benutzersteuerelementdatei, die das Steuerelement enthält, auf dem Webserver befindet, der die Site hostet, können Benutzer das Steuerelement einer anderen Website hinzufügen.

Zum Importieren einer Beschreibungsdatei (und damit der zugeordneten Serversteuerelemente) in eine Webseite wird das ImportCatalogPart-Steuerelement verwendet, das der Seitenentwickler einer Webseite hinzufügen muss. Wenn ein Benutzer die Seite in den Kataloganzeigemodus umschaltet, wird das ImportCatalogPart-Steuerelement angezeigt, mit dem der Benutzer zur .WebPart-Beschreibungsdatei navigieren kann, die dem gewünschten Serversteuerelement entspricht. Der Benutzer muss der Benutzeroberfläche und den Anweisungen des ImportCatalogPart-Steuerelements folgen, um der Webseite das gewünschte Serversteuerelement hinzuzufügen, dessen Darstellung und Eigenschaften vollständig nach den Angaben in der importierten Beschreibungsdatei konfiguriert sind.

Bevor die Beschreibungsdatei eines WebPart-Steuerelements importiert werden kann, muss ein Benutzer die Datei zunächst auf der Grundlage eines bestehenden WebPart-Steuerelements erstellen (exportieren). Eine Beschreibungsdatei für ein Steuerelement kann exportiert werden, wenn die folgenden Bedingungen erfüllt sind:

  • Das Steuerelement verfügt über mit dem Personalizable-Attribut gekennzeichnete Eigenschaften.

  • Der enableExport-Attributwert der Datei Web.config ist für das <webParts>-Element auf true festgelegt.

  • Ein Entwickler legt den Wert der ExportMode-Eigenschaft für das Steuerelement auf einen anderen Wert als den Standardwert None fest, der den Export verhindert. Wenn der Wert der ExportMode-Eigenschaft auf NonSensitiveData festgelegt ist, werden Eigenschaften, die einen IsSensitive-Parameter mit einem Personalizable-Attribut enthalten, beim Export einer Beschreibungsdatei nicht exportiert. Auf diese Weise können Steuerelemententwickler verhindern, dass sensible Daten, z. B. Verbindungszeichenfolgen, in bestimmten Situationen exportiert werden.

Ein Benutzer kann ein für den Export aktiviertes Steuerelement exportieren, indem er im Verbenmenü des Steuerelements auf das Exportieren-Verb klickt und den Anweisungen zum Speichern einer WebPart-Beschreibungsdatei für das Steuerelement folgt. Andere Benutzer können diese Datei anschließend importieren, um eigene Instanzen des Steuerelements zu konfigurieren.

Die ImportCatalogPart-Klasse enthält mehrere Eigenschaften. Die BrowseHelpText-Eigenschaft enthält Text mit Benutzeranweisungen für die Suche nach der Beschreibungsdatei. Die ImportedPartLabelText-Eigenschaft enthält den Text für die im ImportCatalogPart-Steuerelement angezeigte Bezeichnung des importierten Steuerelements. PartImportErrorLabelText enthält Text, der angezeigt wird, wenn während des Imports einer Steuerelementbeschreibung ein Fehler auftritt. Die Title-Eigenschaft überschreibt die Basiseigenschaft, um einen Standardtitel für ein ImportCatalogPart-Steuerelement zuzuweisen, wenn der Entwickler keinen Titel zuweist. Die UploadButtonText-Eigenschaft enthält den Text für die Schaltfläche, auf die der Benutzer klickt, um die Beschreibungsdatei zu uploaden, und die UploadHelpText-Eigenschaft enthält Anweisungen für den Uploadprozess.

Die ImportCatalogPart-Klasse enthält außerdem mehrere eindeutige Methoden. Die GetAvailableWebPartDescriptions-Methode ruft ein WebPartDescription-Objekt für jedes WebPart-Steuerelement im Katalog ab. Dadurch kann ein ImportCatalogPart-Steuerelement Informationen zu jedem Serversteuerelement anzeigen, ohne dass eine Instanz des jeweiligen Steuerelements erstellt werden muss. Auf der Grundlage der an sie übergebenen Beschreibung ruft die GetWebPart-Methode eine Instanz eines bestimmten WebPart-Steuerelements ab.

Die Verwendung des ImportCatalogPart-Steuerelements birgt jedoch inhärente Risiken. Mit den zum Importieren verwendeten Beschreibungsdateien können z. B. schädliche Daten in die Webanwendung importiert werden. Wenn die Beschreibungsdatei als Wert einer Zeichenfolgeneigenschaft beispielsweise schädlichen Skriptcode enthält, kann dieser ausgeführt werden, wenn ein Benutzer die Beschreibungsdatei importiert und das Serversteuerelement, auf das verwiesen wird, einer Webseite hinzufügt. Um das Risiko des Imports von Beschreibungsdateien mit schädlichen Daten zu senken, sollten die Eigenschaftendaten von Serversteuerelementen, deren Eigenschaften Zeichenfolgen enthalten, immer codiert werden. Ein weiteres Risiko liegt im Importieren von Typen über die Beschreibungsdateien (siehe unter Beschreibungsdateien für Webparts-Steuerelemente). Ein böswilliger Benutzer könnte Anforderungen senden, um zahlreiche Assemblys in die AppDomain zu laden, sodass übermäßig viel Speicherplatz belegt würde.

Wenn Sie die importbedingten Risiken umgehen möchten, können Sie das Feature vollständig deaktivieren, indem Sie das Importfeature oder das ImportCatalogPart-Steuerelement nicht verwenden. Sie können den Zugriff auf das Steuerelement auch auf bestimmte Benutzer beschränken. Sie können Sie programmgesteuert über die Rollenverwaltung durchführen (siehe unter Verwalten der Autorisierung mithilfe von Rollen). Beispielsweise könnten Sie beim Laden der Seite überprüfen, ob ein Benutzer eine bestimmte Rolle (beispielsweise die Administratorrolle) aufweist. Wenn der Benutzer diese Rolle aufweist, könnten Sie ihm das ImportCatalogPart-Steuerelement programmgesteuert in die Seite einfügen. Sie können die Gruppe der Benutzer, die das ImportCatalogPart-Steuerelement verwenden darf, auch mit einem deklarativen Verfahren beschränken. Sie könnten in Ihre Webseite, die einen Katalog enthält, zwei CatalogZone-Steuerelemente platzieren: eines für die Benutzer, denen das Importieren erlaubt ist, und ein anderes für die verbleibenden Benutzer. Die Zone für die Benutzer, die importieren dürfen, würde das ImportCatalogPart-Steuerelement enthalten. Die eigentliche Zone könnte sich innerhalb eines LoginView-Steuerelements befinden, sodass Sie die Verwendung des Steuerelements in der Zone auf die von Ihnen angegebenen authentifizierten Benutzer oder Rollen beschränken könnten.

TopicLocation
Gewusst wie: Festlegen des Anzeigemodus einer Webparts-SeiteErstellen von ASP.NET-Webanwendungen in Visual Studio
Gewusst wie: Exportieren der Webparts-SteuerelementeinstellungenErstellen von ASP.NET-Webanwendungen in Visual Studio
Gewusst wie: Festlegen des Anzeigemodus einer Webparts-SeiteErstellen von ASP.NET-Webanwendungen
Gewusst wie: Exportieren der Webparts-SteuerelementeinstellungenErstellen von ASP.NET-Webanwendungen
Gewusst wie: Festlegen des Anzeigemodus einer Webparts-SeiteErstellen von ASP.NET-Webanwendungen in Visual Studio
Gewusst wie: Exportieren der Webparts-SteuerelementeinstellungenErstellen von ASP.NET-Webanwendungen in Visual Studio

Im folgenden Codebeispiel wird die deklarative und programmgesteuerte Verwendung des ImportCatalogPart-Steuerelements auf einer Webseite veranschaulicht. Das Beispiel besteht aus vier Teilen:

  • Einem Benutzersteuerelement, mit dessen Hilfe Sie die Anzeigemodi auf einer Webparts-Seite ändern können.

  • Einer Webseite, die ein CatalogZone-Steuerelement und ein ImportCatalogPart-Steuerelement enthält.

  • Einer Quellcodedatei, die zwei benutzerdefinierte WebPart-Steuerelemente enthält.

  • Einer Erklärung der Funktionsweise des Beispiels, wenn die Seite in einen Browser geladen wird.

Beim ersten Teil dieses Codebeispiels handelt es sich um das Benutzersteuerelement, mit dem der Anzeigemodus auf einer Webseite geändert werden kann. Sie müssen den folgenden Quellcode in eine Datei kopieren und diese Displaymodemenucs.ascx oder Displaymodemenuvb.ascx nennen (je nach der von Ihnen verwendeten Sprache). Ausführliche Informationen zu Anzeigemodi und eine Beschreibung des Quellcodes in diesem Steuerelement finden Sie unter Exemplarische Vorgehensweise: Wechseln des Anzeigemodus auf einer Webparts-Seite.

<%@ control language="C#" classname="DisplayModeMenuCS"%>
<script runat="server">

 // Use a field to reference the current WebPartManager.
  WebPartManager _manager;

  void Page_Init(object sender, EventArgs e)
  {
    Page.InitComplete += new EventHandler(InitComplete);

  }  

  void InitComplete(object sender, System.EventArgs e)
  {
    _manager = WebPartManager.GetCurrentWebPartManager(Page);

    String browseModeName = WebPartManager.BrowseDisplayMode.Name;

    // Fill the dropdown with the names of supported display modes.
    foreach (WebPartDisplayMode mode in _manager.SupportedDisplayModes)
    {
      String modeName = mode.Name;
      // Make sure a mode is enabled before adding it.
      if (mode.IsEnabled(_manager))
      {
        ListItem item = new ListItem(modeName, modeName);
        DisplayModeDropdown.Items.Add(item);
      }
    }

    // If shared scope is allowed for this user, display the scope-switching
    // UI and select the appropriate radio button for the current user scope.
    if (_manager.Personalization.CanEnterSharedScope)
    {
      Panel2.Visible = true;
      if (_manager.Personalization.Scope == PersonalizationScope.User)
        RadioButton1.Checked = true;
      else
        RadioButton2.Checked = true;
    }

  }

  // Change the page to the selected display mode.
  void DisplayModeDropdown_SelectedIndexChanged(object sender, EventArgs e)
  {
    String selectedMode = DisplayModeDropdown.SelectedValue;

    WebPartDisplayMode mode = _manager.SupportedDisplayModes[selectedMode];
    if (mode != null)
      _manager.DisplayMode = mode;
  }

  // Set the selected item equal to the current display mode.
  void Page_PreRender(object sender, EventArgs e)
  {
    ListItemCollection items = DisplayModeDropdown.Items;
    int selectedIndex = 
      items.IndexOf(items.FindByText(_manager.DisplayMode.Name));
    DisplayModeDropdown.SelectedIndex = selectedIndex;
  }

  // Reset all of a user's personalization data for the page.
  protected void LinkButton1_Click(object sender, EventArgs e)
  {
    _manager.Personalization.ResetPersonalizationState();
  }

  // If not in User personalization scope, toggle into it.
  protected void RadioButton1_CheckedChanged(object sender, EventArgs e)
  {
    if (_manager.Personalization.Scope == PersonalizationScope.Shared)
      _manager.Personalization.ToggleScope();
  }

  // If not in Shared scope, and if user is allowed, toggle the scope.
  protected void RadioButton2_CheckedChanged(object sender, EventArgs e)
  {
    if (_manager.Personalization.CanEnterSharedScope && 
        _manager.Personalization.Scope == PersonalizationScope.User)
      _manager.Personalization.ToggleScope();
  }
</script>
<div>
  <asp:Panel ID="Panel1" runat="server" 
    Borderwidth="1" 
    Width="230" 
    BackColor="lightgray"
    Font-Names="Verdana, Arial, Sans Serif" >
    <asp:Label ID="Label1" runat="server" 
      Text="&nbsp;Display Mode" 
      Font-Bold="true"
      Font-Size="8"
      Width="120" 
      AssociatedControlID="DisplayModeDropdown"/>
    <asp:DropDownList ID="DisplayModeDropdown" runat="server"  
      AutoPostBack="true" 
      Width="120"
      OnSelectedIndexChanged="DisplayModeDropdown_SelectedIndexChanged" />
    <asp:LinkButton ID="LinkButton1" runat="server"
      Text="Reset User State" 
      ToolTip="Reset the current user's personalization data for the page."
      Font-Size="8" 
      OnClick="LinkButton1_Click" />
    <asp:Panel ID="Panel2" runat="server" 
      GroupingText="Personalization Scope"
      Font-Bold="true"
      Font-Size="8" 
      Visible="false" >
      <asp:RadioButton ID="RadioButton1" runat="server" 
        Text="User" 
        AutoPostBack="true"
        GroupName="Scope" OnCheckedChanged="RadioButton1_CheckedChanged" />
      <asp:RadioButton ID="RadioButton2" runat="server" 
        Text="Shared" 
        AutoPostBack="true"
        GroupName="Scope" 
        OnCheckedChanged="RadioButton2_CheckedChanged" />
    </asp:Panel>
  </asp:Panel>
</div>


Der zweite Teil des Codebeispiels ist die Webseite. Im oberen Bereich der Seite befinden sich zwei register-Direktiven: eine für das Benutzersteuerelement und eine für die kompilierte Komponente, die die zwei benutzerdefinierten WebPart-Steuerelemente enthält. Beachten Sie, dass die Seite einen deklarativen Verweis auf das ImportCatalogPart-Steuerelement enthält, der in der richtigen Hierarchie von deklarativen Elementen geschachtelt ist. Beachten Sie weiterhin, dass mehrere Eigenschaftenwerte für das <asp:importcatalogpart>-Element deklarativ zugewiesen werden. Die Button1_Click-Methode aktualisiert außerdem eine Reihe von Eigenschaftenwerten für das ImportCatalogPart-Steuerelement.

Im WebPartZone-Steuerelement der Seite werden die beiden benutzerdefinierten WebPart-Steuerelemente deklariert. Das <aspSample:userinfowebpart>-Steuerelement verfügt über ein exportmode="all"-Attribut. Dieses Attribut ermöglicht Benutzern das Exportieren einer Beschreibungsdatei für das Steuerelement, das dann von anderen Benutzern importiert werden kann, die das Steuerelement anhand der Beschreibungsdatei importieren möchten.

zbwea4h4.alert_note(de-de,VS.90).gifHinweis:

Um Benutzern einer Webparts-Anwendung das Exportieren einer Beschreibungsdatei für WebPart-Steuerelemente zu ermöglichen, müssen Sie das Exportfeature aktivieren. Hierfür fügen Sie dem <webParts>-Element, das dem <system.web>-Element untergeordnet ist, in der Datei Web.config ein enableExport="true"-Attribut hinzu. In der Standardeinstellung ist der Export deaktiviert, Sie müssen zum Aktivieren des Exports für Ihre Anwendung daher die Datei Web.config bearbeiten, sofern Sie das nicht bereits getan haben.

<%@ page language="c#" %>
<%@ register TagPrefix="uc1" 
  TagName="DisplayModeMenuCS" 
  Src="DisplayModeMenuCS.ascx" %>
<%@ register tagprefix="aspSample" 
  Namespace="Samples.AspNet.CS.Controls" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

  protected void Button1_Click(object sender, EventArgs e)
  {
    ImportCatalogPart1.Title = "Import Server Controls";
    ImportCatalogPart1.BrowseHelpText = "Enter the path to a "
      + "description file.";
    ImportCatalogPart1.UploadButtonText = "Upload Description";
    ImportCatalogPart1.UploadHelpText = "Upload a description file.";
    ImportCatalogPart1.ImportedPartLabelText = "Imported Controls";
    ImportCatalogPart1.PartImportErrorLabelText = "An error occured " 
      + "during the import process.";

  }

  protected void Page_Load(object sender, EventArgs e)
  {
    Button1.Visible = false;
  }

  protected void ImportCatalogPart1_PreRender(object sender, 
    EventArgs e)
  {
    Button1.Visible = true;
  }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head id="Head1" runat="server">
    <title>
      ImportCatalogPart Control
    </title>
  </head>
  <body>
    <form id="form1" runat="server">
      <asp:webpartmanager id="WebPartManager1" runat="server"  />
      <uc1:DisplayModeMenuCS ID="DisplayModeMenu1" runat="server" />
      <asp:webpartzone id="zone1" runat="server" >
        <PartTitleStyle BorderWidth="1" 
          Font-Names="Verdana, Arial"
          Font-Size="110%"
          BackColor="LightBlue" />
        <zonetemplate>
          <aspSample:TextDisplayWebPart 
            runat="server"   
            id="TextDisplayWebPart1" 
            title = "Text Display WebPart" /> 
          <aspsample:userinfowebpart id="userinfo1" runat="server" 
            Title="User Information" exportmode="all" />
        </zonetemplate>
      </asp:webpartzone> 
      <asp:EditorZone ID="EditorZone1" runat="server">
        <ZoneTemplate>
          <asp:PropertyGridEditorPart ID="PropertyGridEditorPart1" 
            runat="server" />
        </ZoneTemplate>
      </asp:EditorZone>
      <asp:CatalogZone ID="CatalogZone1" runat="server">
        <ZoneTemplate>
          <asp:ImportCatalogPart ID="ImportCatalogPart1" 
            runat="server" 
            Title="My ImportCatalogPart" 
            OnPreRender="ImportCatalogPart1_PreRender"
            BrowseHelpText="Type a path or browse to find a control's 
              description file." 
            UploadButtonText="Upload Description File" 
            UploadHelpText="Click the button to upload the description 
              file."
            ImportedPartLabelText="My User Information WebPart" 
            PartImportErrorLabelText="An error occurred while trying 
              to import a description file."  />
        </ZoneTemplate>
      </asp:CatalogZone>
      <hr />
      <asp:Button ID="Button1" runat="server" 
        Text="Update ImportCatalogPart" 
        OnClick="Button1_Click" />
    </form>
  </body>
</html>


Der dritte Teil des Codebeispiels ist der Quellcode für die zwei benutzerdefinierten WebPart-Steuerelemente. Einige Eigenschaften für diese Steuerelemente sind mit dem WebBrowsable-Attribut gekennzeichnet. Auf diese Weise kann das PropertyGridEditorPart-Steuerelement die Benutzeroberfläche dynamisch generieren, über die ein Benutzer diese Eigenschaften bearbeiten kann, wenn die Steuerelemente sich im Bearbeitungsmodus befinden. Die Eigenschaften sind ebenfalls mit einem WebDisplayName-Attribut gekennzeichnet, damit Sie den Text für die Bezeichnung angeben können, die neben jedem Steuerelement auf der Bearbeitungsbenutzeroberfläche angezeigt wird. Um das Codebeispiel auszuführen, müssen Sie diesen Quellcode kompilieren. Sie können den Code explizit kompilieren und die sich ergebende Assembly im Ordner Bin der Website oder im globalen Assemblycache ablegen. Alternativ können Sie den Quellcode im Ordner App_Code der Site ablegen, wo er zur Laufzeit dynamisch kompiliert wird. In diesem Codebeispiel wird die dynamische Kompilierung verwendet. Eine exemplarische Vorgehensweise, in der beide Methoden der Kompilierung erläutert werden, finden Sie unter Exemplarische Vorgehensweise: Entwickeln und Verwenden eines benutzerdefinierten Serversteuerelements.

Auf das benutzerdefinierte Steuerelement mit dem Namen TextDisplayWebPart wird auf der Webseite mit einem <aspSample:TextDisplayWebPart>-Element verwiesen. Das andere Steuerelement mit der Bezeichnung UserInfoWebPart wird auf der Webseite ebenfalls anfänglich deklariert. Sie werden es später jedoch entfernen, da die Möglichkeit des Importierens einer Beschreibungsdatei für ein Steuerelement gezeigt wird.

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

namespace Samples.AspNet.CS.Controls
{
  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public class UserInfoWebPart : WebPart
  {
    HttpServerUtility server = HttpContext.Current.Server;
    private String _userNickName = "Add a nickname.";
    private String _userPetName = "Add a pet name.";
    private DateTime _userSpecialDate = DateTime.Now;
    private Boolean _userIsCurrent = true;
    private JobTypeName _userJobType = JobTypeName.Unselected;
    public enum JobTypeName
    {
      Unselected = 0,
      Support = 1,
      Service = 2,
      Professional = 3, 
      Technical = 4,
      Manager = 5,
      Executive = 6
    }
    Label NickNameLabel;
    Label PetNickNameLabel;
    Label SpecialDateLabel;
    CheckBox IsCurrentCheckBox;
    Label JobTypeLabel;

    // Add the Personalizable and WebBrowsable attributes to the  
    // public properties, so that users can save property values  
    // and edit them with a PropertyGridEditorPart control.
    [Personalizable(), WebBrowsable, WebDisplayName("Nickname")]
    public String NickName
    {
      get 
      { 
        object o = ViewState["NickName"];
        if (o != null)
          return (string)o;
        else
          return _userNickName;        
      } 

      set { _userNickName = server.HtmlEncode(value); }
    }

    [Personalizable(), WebBrowsable, WebDisplayName("Pet Name")]
    public String PetName
    {
      get 
      { 
        object o = ViewState["PetName"];
        if (o != null)
          return (string)o;
        else
          return _userPetName;        
      }

      set { _userPetName = server.HtmlEncode(value); }
    }

    [Personalizable(), WebBrowsable(), WebDisplayName("Special Day")]
    public DateTime SpecialDay
    {
      get
      {
        object o = ViewState["SpecialDay"];
        if (o != null)
          return (DateTime)o;
        else
          return _userSpecialDate;

      }

      set { _userSpecialDate = value; }
    }

    [Personalizable(), WebBrowsable(), WebDisplayName("Job Type")]
    public JobTypeName UserJobType
    {
      get
      {
        object o = ViewState["UserJobType"];
        if (o != null)
          return (JobTypeName)o;
        else
          return _userJobType;
      }

      set { _userJobType = (JobTypeName)value; }
    }

    [Personalizable(), WebBrowsable(), WebDisplayName("Is Current")]
    public Boolean IsCurrent
    {
      get
      {
        object o = ViewState["IsCurrent"];
        if (o != null)
          return (Boolean)o;
        else
          return _userIsCurrent;
      }

      set { _userIsCurrent = value; }
    }


    protected override void CreateChildControls()
    {
      Controls.Clear();

      NickNameLabel = new Label();
      NickNameLabel.Text = this.NickName;
      SetControlAttributes(NickNameLabel);

      PetNickNameLabel = new Label();
      PetNickNameLabel.Text = this.PetName;
      SetControlAttributes(PetNickNameLabel);

      SpecialDateLabel = new Label();
      SpecialDateLabel.Text = this.SpecialDay.ToShortDateString();
      SetControlAttributes(SpecialDateLabel);

      IsCurrentCheckBox = new CheckBox();
      IsCurrentCheckBox.Checked = this.IsCurrent;
      SetControlAttributes(IsCurrentCheckBox);

      JobTypeLabel = new Label();
      JobTypeLabel.Text = this.UserJobType.ToString();
      SetControlAttributes(JobTypeLabel);

      ChildControlsCreated = true;

    }

    private void SetControlAttributes(WebControl ctl)
    {
      ctl.BackColor = Color.White;
      ctl.BorderWidth = 1;
      ctl.Width = 200;
      this.Controls.Add(ctl);
    }

    protected override void RenderContents(HtmlTextWriter writer)
    {
      writer.Write("Nickname:");
      writer.WriteBreak();
      NickNameLabel.RenderControl(writer);
      writer.WriteBreak();
      writer.Write("Pet Name:");
      writer.WriteBreak();
      PetNickNameLabel.RenderControl(writer);
      writer.WriteBreak();
      writer.Write("Special Date:");
      writer.WriteBreak();
      SpecialDateLabel.RenderControl(writer);
      writer.WriteBreak();
      writer.Write("Job Type:");
      writer.WriteBreak();
      JobTypeLabel.RenderControl(writer);
      writer.WriteBreak();
      writer.Write("Current:");
      writer.WriteBreak();
      IsCurrentCheckBox.RenderControl(writer);
    }
  }


  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public class TextDisplayWebPart : WebPart
  {
    private String _contentText = null;
    TextBox input;
    Label DisplayContent;
    Literal lineBreak;

    [Personalizable(), WebBrowsable]
    public String ContentText
    {
      get { return _contentText; }
      set { _contentText = value; }
    }

    protected override void CreateChildControls()
    {
      Controls.Clear();
      DisplayContent = new Label();
      DisplayContent.BackColor = Color.LightBlue;
      DisplayContent.Text = this.ContentText;
      this.Controls.Add(DisplayContent);

      lineBreak = new Literal();
      lineBreak.Text = @"<br />";
      Controls.Add(lineBreak);

      input = new TextBox();
      this.Controls.Add(input);
      Button update = new Button();
      update.Text = "Set Label Content";
      update.Click += new EventHandler(this.submit_Click);
      this.Controls.Add(update);

    }

    private void submit_Click(object sender, EventArgs e)
    {
      // Update the label string.
      if (!String.IsNullOrEmpty(input.Text))
      {
        _contentText = Context.Server.HtmlEncode(input.Text) + @"<br />";
        input.Text = String.Empty;
        DisplayContent.Text = this.ContentText;
      }
    }

  }

}


Führen Sie jetzt das Codebeispiel aus. Laden Sie die Webseite in einem Browser. Im ersten Schritt wird das UserInfoWebPart-Steuerelement bearbeitet. Verwenden Sie das Dropdownlisten-Steuerelement Anzeigemodus, und wählen Sie Bearbeiten aus, um in den Bearbeitungsmodus der Seite zu wechseln. Klicken Sie auf das Verbenmenü des UserInfoWebPart-Steuerelements (den Pfeil nach unten in der Titelleiste) und dann auf Bearbeiten. Wenn die Bearbeitungsoberfläche angezeigt wird, werden unterhalb des UserInfoWebPart-Steuerelements verschiedene Bearbeitungssteuerelemente angezeigt, mit denen Sie die Feldwerte bearbeiten können. Bearbeiten Sie einige Felder, klicken Sie auf OK, und wechseln Sie dann über das Dropdownlisten-Steuerelement Anzeigemodus in den Durchsuchen-Modus zurück.

Im zweiten Schritt wird eine .WebPart-Beschreibungsdatei für das UserInfoWebPart-Steuerelement exportiert. Klicken Sie auf das Verbenmenü des benutzerdefinierten Steuerelements (den Pfeil nach unten in der Titelleiste) und dann auf Exportieren. Folgen Sie zum Speichern der .WebPart-Beschreibungsdatei für das Steuerelement den Anweisungen. Schließen Sie nun die Webseite, und bearbeiten Sie den Quellcode der Seite in einem Editor. Löschen Sie das Deklarationselement für das <aspSample:userinfowebpart>-Steuerelement, und speichern und schließen Sie dann die Datei. (Mit diesem Schritt versetzen Sie sich in die Lage eines Benutzers, der über kein UserInfoWebPart-Steuerelement verfügt, um das Steuerelement dann in die Seite zu importieren.)

Laden Sie die Webseite erneut in einem Browser. Da Sie das UserInfoWebPart-Steuerelement entfernt haben, sollte es nicht angezeigt werden. Verwenden Sie das Dropdownlisten-Steuerelement Anzeigemodus, und wählen Sie Katalog aus, um in den Katalogmodus der Seite zu wechseln. Klicken Sie im ImportCatalogPart-Steuerelement auf die Schaltfläche Durchsuchen, navigieren Sie zu der von Ihnen erstellten .WebPart-Datei, und klicken Sie dann auf die Schaltfläche Uploaden. Es sollte ein Verweis auf das Steuerelement mit einem daneben befindlichen Kontrollkästchen angezeigt werden. Aktivieren Sie das Kontrollkästchen, und klicken Sie auf Hinzufügen, um das Steuerelement zur Seite hinzuzufügen.

Klicken Sie in dieser Ansicht der Seite auf die Aktualisieren-Schaltfläche für ImportCatalogPart, die sich im unteren Bereich der Seite befindet, um zu sehen, wie sich die programmgesteuerte Aktualisierung einiger Eigenschaftenwerte für das ImportCatalogPart-Steuerelement auswirkt. Achten Sie nach dem Klicken auf die Schaltfläche darauf, wie sich die Eigenschaften in der Benutzeroberfläche ändern.

Klicken Sie dann auf Schließen, um den Katalogmodus zu beenden, und wechseln Sie in den Durchsuchen-Modus zurück. Nun sollte das UserInfoWebPart-Steuerelement mit den Werten, die es beim vorausgegangenen Export aufwies, auf der Seite angezeigt werden.

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0, 2.0
Anzeigen: