IWebEditable Interfejs

Definicja

Udostępnia interfejs dla deweloperów do określania niestandardowych kontrolek edycji skojarzonych z kontrolką WebPart .

C#
public interface IWebEditable
Pochodne

Przykłady

Poniższy przykład kodu pokazuje, jak zastąpić metody interfejsu IWebEditable w niestandardowej kontrolce, która następnie tworzy wystąpienie kontrolki niestandardowej WebPartEditorPart po WebPart wprowadzeniu trybu edycji.

Ten przykład zawiera cztery części:

  • Kod dla klasy niestandardowej.

  • Strona sieci Web, która hostuje kontrolkę niestandardową.

  • Kontrolka użytkownika, która przełącza stronę w tryb edycji.

  • Opis sposobu działania przykładu w przeglądarce.

Pierwszą częścią przykładu kodu jest klasa niestandardowa TextDisplayWebPart . Zwróć uwagę, że klasa pochodzi z WebPart klasy i implementuje IWebEditable interfejs, zapewniając określone implementacje CreateEditorParts dla metody i WebBrowsableObject właściwości. Zauważ również, że zagnieżdżone w TextDisplayWebPart klasie jest prywatną, niestandardową TextDisplayEditorPart klasą pochodzącą z klasy bazowej EditorPart . Aby przykład kodu został uruchomiony, należy skompilować ten kod źródłowy. Można je jawnie skompilować i umieścić wynikowy zestaw w folderze Bin witryny sieci Web lub globalnej pamięci podręcznej zestawów. Możesz też umieścić kod źródłowy w folderze App_Code witryny, w którym będzie dynamicznie kompilowany w czasie wykonywania. Aby zapoznać się z przewodnikiem, który pokazuje obie metody kompilowania, zobacz Przewodnik: opracowywanie i używanie niestandardowej kontroli serwera sieci Web.

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;
        }
      }
    }
  }
}

Drugą częścią przykładu kodu jest strona sieci Web, która hostuje kontrolkę niestandardową. Zwróć uwagę, że chociaż kontrolka EditorZone jest zadeklarowana w znaczniku strony, kontrolka niestandardowa EditorPart nie musi być tam przywoływana, ponieważ można ją dodać programowo w czasie wykonywania.

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>

Trzecia część przykładu kodu to kontrolka użytkownika, która umożliwia użytkownikowi przełączenie strony w tryb edycji. Zwróć uwagę, że kontrolka użytkownika jest przywołyni na stronie internetowej hostingu. Aby uzyskać pełny opis sposobu tworzenia tej kontrolki użytkownika, zobacz Przewodnik: zmienianie trybów wyświetlania na stronie składników Web Part.

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>

Aby uruchomić przykład kodu, załaduj hostowanie strony sieci Web w przeglądarce, dodaj jakiś tekst do pola tekstowego, a następnie kliknij przycisk Ustaw zawartość etykiety , aby zaktualizować etykietę w kontrolce. Aby przełączyć stronę do trybu edycji, wybierz pozycję Edytuj z listy rozwijanej zawierającej tryby wyświetlania. Aby wyświetlić interfejs użytkownika z kontrolki niestandardowej TextDisplayEditorPart , kliknij strzałkę listy rozwijanej menu czasowników w kontrolce TextDisplayWebPart , a następnie wybierz pozycję Edytuj. W interfejsie użytkownika edycji możesz użyć listy rozwijanej zawierającej style czcionek, aby zaktualizować styl tekstu etykiety w kontrolce TextDisplayWebPart . Musisz kliknąć pozycję Tryb przeglądania na liście rozwijanej tryby wyświetlania, aby przywrócić stronę do normalnego widoku i potwierdzić, że tekst w etykiecie ma teraz wybrany styl czcionki w trybie edycji.

Uwagi

Interfejs IWebEditable umożliwia skojarzenie kontrolek niestandardowych EditorPart z kontrolką serwera, taką jak WebPart kontrolka, kontrolka użytkownika lub niestandardowa kontrolka serwera. Kontrolki EditorPart są zawarte w kontrolce EditorZone , a ta strefa z kontrolkami edycji zapewnia użytkownikom końcowym interfejs użytkownika do modyfikowania właściwości, wyglądu i zachowania skojarzonej WebPart kontrolki.

Interfejs IWebEditable zawiera dwa uwidocznione elementy członkowskie. Właściwość WebBrowsableObject umożliwia EditorPart sterowanie uzyskaniem odwołania do skojarzonej kontrolki serwera. Metoda CreateEditorParts służy do tworzenia wystąpienia każdej kontrolki niestandardowej EditorPart skojarzonej z kontrolką serwera i zwracania ich jako kolekcji.

Interfejs IWebEditable jest już implementowany w klasie bazowej WebPart , chociaż domyślnie ta implementacja nie kojarzy żadnych kontrolek niestandardowych EditorPart z klasą WebPart . Aby skojarzyć pochodną WebPart kontrolkę z kontrolkami niestandardowymi EditorPart , można zastąpić metodę CreateEditorParts .

Uwagi dotyczące implementowania

Jeśli chcesz użyć kontrolek serwera, które nie WebPart są kontrolkami w aplikacji składników Web Part (czyli w przypadku dodania tych kontrolek do WebPartZoneBase strefy), a jeśli chcesz skojarzyć kontrolki niestandardowe EditorPart z takimi kontrolkami serwera, musisz zaimplementować IWebEditable interfejs. Kontrolki pochodne WebPart nie powinny implementować interfejsu, ponieważ klasa bazowa WebPart już to robi.

Właściwości

WebBrowsableObject

Pobiera odwołanie do kontrolki, kontrolki WebPart użytkownika lub kontrolki niestandardowej, która będzie edytowana przez EditorPart kontrolki.

Metody

CreateEditorParts()

Zwraca kolekcję kontrolek niestandardowych EditorPart skojarzonych z kontrolką serwera, która implementuje IWebEditable interfejs.

Dotyczy

Produkt Wersje
.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

Zobacz też