Auf Englisch lesen

Freigeben über


IWebEditable Schnittstelle

Definition

Stellt eine Schnittstelle bereit, mit deren Hilfe Entwickler benutzerdefinierte Bearbeitungssteuerelemente angeben können, die einem WebPart-Steuerelement zugeordnet sind.

C#
public interface IWebEditable
Abgeleitet

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie die Methoden der IWebEditable Schnittstelle in einem benutzerdefinierten WebPart Steuerelement überschrieben werden, das dann eine Instanz eines benutzerdefinierten EditorPart Steuerelements erstellt, wenn das Steuerelement in den WebPart Bearbeitungsmodus wechselt.

Dieses Beispiel umfasst vier Teile:

  • Der Code für die benutzerdefinierte Klasse.

  • Die Webseite, die das benutzerdefinierte Steuerelement hostet.

  • Ein Benutzersteuerelement, das die Seite in den Bearbeitungsmodus wechselt.

  • Eine Beschreibung der Funktionsweise des Beispiels in einem Browser.

Der erste Teil des Codebeispiels ist die benutzerdefinierte TextDisplayWebPart Klasse. Beachten Sie, dass die -Klasse von der WebPart -Klasse abgeleitet wird und die IWebEditable -Schnittstelle implementiert, wobei spezifische Implementierungen für die CreateEditorParts -Methode und die WebBrowsableObject -Eigenschaft bereitgestellt werden. Beachten Sie auch, dass in der TextDisplayWebPart -Klasse geschachtelt eine private, benutzerdefinierte TextDisplayEditorPart Klasse ist, die von der Basisklasse EditorPart abgeleitet wird. 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 TextDisplayWebPart : WebPart
  {
    private String _contentText = null;
    private String _fontStyle = null;
    TextBox input;
    Label DisplayContent;
    Literal lineBreak;

    public override EditorPartCollection CreateEditorParts()
    {
      ArrayList editorArray = new ArrayList();
      TextDisplayEditorPart edPart = new TextDisplayEditorPart();
      edPart.ID = this.ID + "_editorPart1";
      editorArray.Add(edPart);
      EditorPartCollection editorParts = 
        new EditorPartCollection(editorArray);
      return editorParts;
    }

    public override object WebBrowsableObject
    {
      get { return this; }
    }

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

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

    protected override void CreateChildControls()
    {
      Controls.Clear();
      DisplayContent = new Label();
      DisplayContent.BackColor = Color.LightBlue;
      DisplayContent.Text = this.ContentText;
      if (FontStyle == null)
        FontStyle = "None";
      SetFontStyle(DisplayContent, FontStyle);
      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;
      }
    }

    private void SetFontStyle(Label label, String selectedStyle)
    {
      if (selectedStyle == "Bold")
      {
        label.Font.Bold = true;
        label.Font.Italic = false;
        label.Font.Underline = false;
      }
      else if (selectedStyle == "Italic")
      {
        label.Font.Italic = true;
        label.Font.Bold = false;
        label.Font.Underline = false;
      }
      else if (selectedStyle == "Underline")
      {
        label.Font.Underline = true;
        label.Font.Bold = false;
        label.Font.Italic = false;
      }
      else
      {
        label.Font.Bold = false;
        label.Font.Italic = false;
        label.Font.Underline = false;
      }
    }

    // Create a custom EditorPart to edit the WebPart control.
    [AspNetHostingPermission(SecurityAction.Demand,
      Level = AspNetHostingPermissionLevel.Minimal)]
    private class TextDisplayEditorPart : EditorPart
    {
      DropDownList _partContentFontStyle;

      public override bool ApplyChanges()
      {
        TextDisplayWebPart part = 
          (TextDisplayWebPart)WebPartToEdit;
        // Update the custom WebPart control with the font style.
        part.FontStyle = PartContentFontStyle.SelectedValue;

        return true;
      }

      public override void SyncChanges()
      {
        TextDisplayWebPart part = 
          (TextDisplayWebPart)WebPartToEdit;
        String currentStyle = part.FontStyle;

        // Select the current font style in the drop-down control.
        foreach (ListItem item in PartContentFontStyle.Items)
        {
          if (item.Value == currentStyle)
          {
            item.Selected = true;
            break;
          }
        }
      }

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

        // Add a set of font styles to the dropdown list.
        _partContentFontStyle = new DropDownList();
        _partContentFontStyle.Items.Add("Bold");
        _partContentFontStyle.Items.Add("Italic");
        _partContentFontStyle.Items.Add("Underline");
        _partContentFontStyle.Items.Add("None");

        Controls.Add(_partContentFontStyle);
      }

      protected override void RenderContents(HtmlTextWriter writer)
      {
        writer.Write("<b>Text Content Font Style</b>");
        writer.WriteBreak();
        writer.Write("Select a font style.");
        writer.WriteBreak();
        _partContentFontStyle.RenderControl(writer);
        writer.WriteBreak();
      }

      // Access the drop-down control through a property.
      private DropDownList PartContentFontStyle
      {
        get 
        {
          EnsureChildControls();
          return _partContentFontStyle;
        }
      }
    }
  }
}

Der zweite Teil des Codebeispiels ist eine Webseite, die das benutzerdefinierte Steuerelement hostet. Beachten Sie, dass, obwohl ein EditorZone Steuerelement im Markup der Seite deklariert ist, dort nicht auf das benutzerdefinierte EditorPart Steuerelement verwiesen werden muss, da es zur Laufzeit programmgesteuert hinzugefügt werden kann.

ASP.NET (C#)
<%@ page language="c#" %>
<%@ register TagPrefix="uc1" 
  TagName="DisplayModeUC" 
  Src="DisplayModeUCcs.ascx" %>
<%@ register tagprefix="aspSample" 
  Namespace="Samples.AspNet.CS.Controls" 
  Assembly="TextDisplayWebPartCS" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>
      Text Display WebPart with EditorPart
    </title>
  </head>
  <body>
    <form id="form1" runat="server">
      <asp:webpartmanager id="WebPartManager1" runat="server" />
      <uc1:DisplayModeUC ID="DisplayModeUC1" runat="server" />
      <asp:webpartzone id="zone1" runat="server" 
        CloseVerb-Enabled="false">
        <zonetemplate>
          <aspSample:TextDisplayWebPart 
            runat="server"   
            id="textwebpart" 
            title = "Text Content WebPart" /> 
        </zonetemplate>
      </asp:webpartzone> 
      <asp:EditorZone ID="EditorZone1" runat="server" /> 
    </form>
  </body>
</html>

Der dritte Teil des Codebeispiels ist ein Benutzersteuerelement, das es einem Benutzer ermöglicht, die Seite in den Bearbeitungsmodus zu wechseln. Beachten Sie, dass auf das Benutzersteuerelement in der Hostingwebseite verwiesen wird. Eine vollständige Beschreibung des Erstellens dieses Benutzersteuerelements finden Sie unter Exemplarische Vorgehensweise: Ändern von Anzeigemodi auf einer Webparts-Seite.

ASP.NET (C#)
<%@ control language="C#" classname="DisplayModeMenu"%>

<script runat="server">

  // On initial load, fill the dropdown with display modes.
  void DisplayModeDropdown_Load(object sender, System.EventArgs e)
  {
    if (!IsPostBack)
    {
      WebPartManager mgr = 
        WebPartManager.GetCurrentWebPartManager(Page);
      String browseModeName = WebPartManager.BrowseDisplayMode.Name;
      // Use a sorted list so the modes are sorted alphabetically.
      SortedList itemArray = 
        new SortedList(mgr.SupportedDisplayModes.Count);

      // Add display modes only if they are supported on the page.
      foreach (WebPartDisplayMode mode in mgr.SupportedDisplayModes)
      {
        String modeName = mode.Name;
        itemArray.Add(modeName, modeName + " Mode");      
      }
      // Fill the dropdown with the display mode names.
      foreach(DictionaryEntry arrayItem in itemArray)
      {
        ListItem item = new ListItem(arrayItem.Value.ToString(), 
          arrayItem.Key.ToString());
        if (item.Value == browseModeName)
          item.Selected = true;
        DisplayModeDropdown.Items.Add(item);
      }
    }
  }

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

    foreach (WebPartDisplayMode mode in mgr.SupportedDisplayModes)
    {
      if (selectedMode == mode.Name)
      {
        mgr.DisplayMode = mode;
        break;
      }
    }
  }

</script>
<div>
  <asp:DropDownList ID="DisplayModeDropdown" 
    runat="server" 
    AutoPostBack="true" 
    OnLoad="DisplayModeDropdown_Load" 
    OnSelectedIndexChanged="DisplayModeDropdown_SelectedIndexChanged" />
</div>

Laden Sie zum Ausführen des Codebeispiels die Hostingwebseite in einem Browser, fügen Sie dem Textfeld Text hinzu, und klicken Sie auf die Schaltfläche Bezeichnungsinhalt festlegen , um die Bezeichnung im Steuerelement zu aktualisieren. Um die Seite in den Bearbeitungsmodus zu wechseln, wählen Sie bearbeiten in der Dropdownliste mit den Anzeigemodi aus. Um die Benutzeroberfläche über das benutzerdefinierte TextDisplayEditorPart Steuerelement anzuzeigen, klicken Sie auf den Dropdownpfeil des Verbenmenüs auf dem TextDisplayWebPart Steuerelement, und wählen Sie Bearbeiten aus. Auf der Bearbeitungsbenutzeroberfläche können Sie die Dropdownliste verwenden, die die Schriftarten enthält, um die Textart für die Bezeichnung im TextDisplayWebPart Steuerelement zu aktualisieren. Sie müssen in der Dropdownliste anzeigemodi auf Durchsuchenmodus klicken, um die Seite in die normale Ansicht zurückzukehren und zu bestätigen, dass der Text in der Bezeichnung jetzt die Schriftart aufweist, die Sie im Bearbeitungsmodus ausgewählt haben.

Hinweise

Mit IWebEditable der -Schnittstelle können Sie benutzerdefinierte EditorPart Steuerelemente einem Serversteuerelement zuordnen, z. B. einem WebPart Steuerelement, einem Benutzersteuerelement oder einem benutzerdefinierten Serversteuerelement. Die EditorPart Steuerelemente sind in einem EditorZone Steuerelement enthalten, und diese Zone mit ihren Bearbeitungssteuerelementen bietet Endbenutzern eine Benutzeroberfläche (UI) zum Ändern von Eigenschaften, Darstellung und Verhalten des zugeordneten WebPart Steuerelements.

Die IWebEditable Schnittstelle enthält zwei verfügbar gemachte Member. Die WebBrowsableObject -Eigenschaft bietet eine Möglichkeit für EditorPart Steuerelemente, einen Verweis auf das zugeordnete Serversteuerelement abzurufen. Die CreateEditorParts -Methode wird verwendet, um eine Instanz jedes benutzerdefinierten EditorPart Steuerelements zu erstellen, das einem Serversteuerelement zugeordnet ist, und gibt sie als Sammlung zurück.

Die IWebEditable Schnittstelle ist bereits in der Basisklasse WebPart implementiert, obwohl diese Implementierung standardmäßig keine benutzerdefinierten EditorPart Steuerelemente mit der WebPart -Klasse verknüpft. Um ein abgeleitetes WebPart Steuerelement benutzerdefinierten EditorPart Steuerelementen zuzuordnen, können Sie die CreateEditorParts -Methode überschreiben.

Hinweise für Ausführende

Wenn Sie Serversteuerelemente verwenden möchten, die keine WebPart Steuerelemente in einer Webparts-Anwendung sind (d. h. wenn Sie diese Steuerelemente einer WebPartZoneBase Zone hinzufügen), und wenn Sie diesen Serversteuerelementen benutzerdefinierte EditorPart Steuerelemente zuordnen möchten, müssen Sie die IWebEditable Schnittstelle implementieren. Abgeleitete WebPart Steuerelemente sollten die -Schnittstelle nicht implementieren, da dies von der Basisklasse WebPart bereits erfolgt.

Eigenschaften

WebBrowsableObject

Ruft einen Verweis auf das von den WebPart-Steuerelementen zu bearbeitende EditorPart-Steuerelement, Benutzersteuerelement oder benutzerdefinierte Steuerelement ab.

Methoden

CreateEditorParts()

Gibt eine Auflistung von benutzerdefinierten EditorPart-Steuerelementen zurück, die einem Serversteuerelement zugeordnet wird, das die IWebEditable-Schnittstelle implementiert.

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