DeclarativeCatalogPart.WebPartsListUserControlPath Eigenschaft

Definition

Ruft den Pfad zu einem Benutzersteuerelement ab, das eine Liste der WebPart-Steuerelemente oder Serversteuerelemente für den Katalog enthält, oder legt diesen Pfad fest.

C#
[System.Web.UI.Themeable(false)]
public string WebPartsListUserControlPath { get; set; }

Eigenschaftswert

Eine Zeichenfolge mit dem Pfad zu einem Benutzersteuerelement, das einen Satz von WebPart-Steuerelementen oder Serversteuerelementen enthält.

Attribute

Beispiele

Im folgenden Codebeispiel wird gezeigt, wie die WebPartsListUserControlPath Eigenschaft deklarativ und programmgesteuert verwendet wird. Dieses Beispiel umfasst fünf Teile:

  • Ein Benutzersteuerelement, mit dem Sie die Anzeigemodi auf einer Webparts-Seite ändern können.

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

  • Ein weiteres Benutzersteuerelement, das Verweise auf die benutzerdefinierten WebPart Steuerelemente enthält und von der WebPartsListUserControlPath -Eigenschaft auf der Webseite referenziert wird.

  • Eine Webseite, die ein CatalogZone -Steuerelement und ein DeclarativeCatalogPart -Steuerelement enthält, das auf das Benutzersteuerelement verweist, das die benutzerdefinierten Steuerelemente enthält.

  • Eine Erläuterung, wie das Beispiel funktioniert, wenn Sie die Seite in einem Browser laden.

Der erste Teil dieses Codebeispiels ist das Benutzersteuerelement, mit dem Benutzer die Anzeigemodi auf einer Webseite ändern können. Ausführliche Informationen zu Anzeigemodi und eine Beschreibung des Quellcodes in diesem Steuerelement finden Sie unter Exemplarische Vorgehensweise: Ändern von Anzeigemodi auf einer Webparts-Seite.

ASP.NET (C#)
<%@ 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=" 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 der Quellcode für die beiden benutzerdefinierten WebPart Steuerelemente. Damit das Codebeispiel ausgeführt werden kann, müssen Sie diesen Quellcode kompilieren. Sie können sie explizit kompilieren und die resultierende Assembly im Ordner Bin ihrer Website oder im globalen Assemblycache ablegen. Alternativ können Sie den Quellcode im Ordner App_Code Ihrer Website ablegen, wo er zur Laufzeit dynamisch kompiliert wird. Eine exemplarische Vorgehensweise, die beide Kompilierungsmethoden veranschaulicht, finden Sie unter Exemplarische Vorgehensweise: Entwickeln und Verwenden eines benutzerdefinierten Webserversteuerelements.

C#
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's 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 PetNameLabel;
    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);

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

      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();
      PetNameLabel.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 = input.Text + @"<br />";
        input.Text = String.Empty;
        DisplayContent.Text = this.ContentText;
      }
    }
  }
}

Der dritte Teil des Codebeispiels ist das Benutzersteuerelement, das die benutzerdefinierten WebPart Steuerelemente enthält und von der WebPartsListUserControlPath -Eigenschaft referenziert wird.

ASP.NET (C#)
<%@ Control Language="C#" ClassName="WebUserControl" %>
<%@ register tagprefix="aspSample" 
  Namespace="Samples.AspNet.CS.Controls" 
  Assembly="UserInfoWebPartCS" %>

<aspSample:UserInfoWebPart 
  runat="server"   
  id="userinfo1" 
  title = "User Information WebPart"
  Description ="Contains custom, editable user information for display on a page." />
<aspSample:TextDisplayWebPart 
  runat="server"   
  id="TextDisplayWebPart1" 
  title = "Text Display WebPart" 
  Description="Contains a label where users can dynamically update the text." />

Der vierte Teil des Beispiels ist die Webseite, die das DeclarativeCatalogPart -Steuerelement enthält. Beachten Sie, dass die WebPartsListUserControlPath Eigenschaft im Markup der Seite deklarativ festgelegt wird. Der Eigenschaftswert kann auch programmgesteuert festgelegt werden, wenn der Benutzer auf eine Schaltfläche klickt, die verfügbar gemacht wird, wenn sich die Seite im Kataloganzeigemodus befindet.

ASP.NET (C#)
<%@ page language="c#" %>
<%@ register TagPrefix="uc1" 
  TagName="DisplayModeMenuCS" 
  Src="DisplayModeMenuCS.ascx" %>

<!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 Page_Load(object sender, EventArgs e)
{
  Button1.Visible = false;
  TextBox1.Visible = false;
}

// <snippet3>
protected void Button1_Click(object sender, EventArgs e)
{
  DeclarativeCatalogPart1.WebPartsListUserControlPath =
    Server.HtmlEncode(TextBox1.Text);
}
// </snippet3>

// <snippet4>
protected void DeclarativeCatalogPart1_PreRender(object sender,
  EventArgs e)
{
  Button1.Visible = true;
  TextBox1.Visible = true;
}
// </snippet4> 

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>
      DeclarativeCatalogPart 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>
          <asp:BulletedList ID="BulletedList1" 
            Runat="server"
            DisplayMode="HyperLink"
            Title="Favorites">
            <asp:ListItem Value="http://msdn.microsoft.com">
              MSDN
            </asp:ListItem>
            <asp:ListItem Value="http://www.asp.net">
              ASP.NET
            </asp:ListItem>
            <asp:ListItem Value="http://www.msn.com">
              MSN
            </asp:ListItem>
          </asp:BulletedList>
        </zonetemplate>
      </asp:webpartzone> 
      <div>
      <hr />
      <asp:Button ID="Button1" runat="server" 
        Text="Update WebPartsListUserControlPath property" 
        OnClick="Button1_Click" />
      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
      </div>
      <asp:CatalogZone ID="CatalogZone1" runat="server">
        <ZoneTemplate>
          <asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1"  
            runat="server" 
            Title="Web Parts Catalog"
            ChromeType="TitleOnly" 
            Description="Contains a user control with Web Parts and 
              an ASP.NET Calendar control." 
            OnPreRender="DeclarativeCatalogPart1_PreRender"
            WebPartsListUserControlPath="webusercontrolcs.ascx">
            <WebPartsTemplate>
              <asp:Calendar ID="Calendar1" runat="server" 
                Title="My Calendar" 
                Description="ASP.NET Calendar control used as a personal calendar." />
            </WebPartsTemplate>              
          </asp:DeclarativeCatalogPart>
        </ZoneTemplate>
      </asp:CatalogZone>
    </form>
  </body>
</html>

Wenn Sie die Seite in einem Browser laden, wählen Sie im Dropdownlistensteuerelement Anzeigemodus die Option Katalogmodus aus, um in den Katalogmodus zu wechseln. Im Katalogmodus können Sie die Steuerelemente anzeigen, die zur Seite hinzugefügt werden können. Klicken Sie auf die Schaltfläche WebPartsListUserControlPath-Eigenschaft aktualisieren , ohne einen Wert in das Textfeld einzugeben. Beachten Sie, dass der Katalog aktualisiert wird, wenn der -Eigenschaft eine leere Zeichenfolge ("") zugewiesen ist, und nur das Steuerelement, das explizit auf der Seite deklariert ist, im Katalog verbleibt. Wenn Sie den Namen des Benutzersteuerelements eingeben, das die WebPart Steuerelemente in das Textfeld enthält, und erneut auf die Schaltfläche WebPartsListUserControlPath-Eigenschaft aktualisieren klicken, zeigt die WebPartsListUserControlPath Eigenschaft jetzt erneut auf das Benutzersteuerelement, und die zusätzlichen WebPart Steuerelemente werden im Katalog erneut angezeigt.

Hinweise

Mit WebPartsListUserControlPath der -Eigenschaft können Entwickler den Pfad zu einem Benutzersteuerelement angeben, das einen Satz von WebPart oder anderen Serversteuerelementen enthält, die einer WebPartZoneBase Zone hinzugefügt werden können. Wenn dieser Eigenschaft ein gültiger Pfad zu einem Benutzersteuerelement zugewiesen ist, werden die Steuerelemente zum Zeitpunkt der Kompilierer automatisch dem Katalog hinzugefügt.

Die WebPartsListUserControlPath -Eigenschaft kann nützlich sein, da sie eine Möglichkeit zum Verpacken und Wiederverwenden von verfügbaren Steuerelementen auf vielen verschiedenen Seiten oder Websites bietet. Anstatt jedes Steuerelement in einem Katalog für jede Seite, die einen Katalog bereitstellen möchte, manuell zu deklarieren, können Entwickler diese Eigenschaft verwenden, um auf ein Benutzersteuerelement zu verweisen, das auf einen gesamten Satz von Steuerelementen WebPart verweist. Außerdem kann die WebPartsListUserControlPath -Eigenschaft zusammen mit WebPart Steuerelementen verwendet werden, die explizit in einem <asp:declarativecatalogpart> Element auf einer Webseite deklariert werden.

Diese Eigenschaft kann nicht durch Designs oder Stylesheetdesigns festgelegt werden. Weitere Informationen finden Sie unter ThemeableAttribute und ASP.NET-Designs und Skins.

Gilt für:

Produkt Versionen
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Weitere Informationen