IWebEditable Interface
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Fournit une interface pour les développeurs pour spécifier les contrôles d'édition personnalisés associés à un contrôle WebPart.
public interface class IWebEditable
public interface IWebEditable
type IWebEditable = interface
Public Interface IWebEditable
- Dérivé
Exemples
L’exemple de code suivant montre comment remplacer les méthodes de l’interface IWebEditable dans un contrôle personnalisé WebPart , qui crée ensuite une instance d’un contrôle personnalisé EditorPart lorsque le WebPart contrôle passe en mode édition.
Cet exemple comporte quatre parties :
Code de la classe personnalisée.
Page web qui héberge le contrôle personnalisé.
Contrôle utilisateur qui bascule la page en mode édition.
Description du fonctionnement de l’exemple dans un navigateur.
La première partie de l’exemple de code est la classe personnalisée TextDisplayWebPart
. Notez que la classe dérive de la WebPart classe et implémente l’interface IWebEditable , en fournissant des implémentations spécifiques pour la CreateEditorParts méthode et la WebBrowsableObject propriété. Notez également que la TextDisplayWebPart
classe imbriquée est une classe privée et personnalisée TextDisplayEditorPart
qui dérive de la classe de base EditorPart . Pour que l’exemple de code s’exécute, vous devez compiler ce code source. Vous pouvez le compiler explicitement et placer l’assembly résultant dans le dossier Bin de votre site web ou dans le global assembly cache. Vous pouvez également placer le code source dans le dossier App_Code de votre site, où il sera compilé dynamiquement au moment de l’exécution. Pour obtenir une procédure pas à pas qui illustre les deux méthodes de compilation, consultez Procédure pas à pas : développement et utilisation d’un contrôle de serveur web personnalisé.
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;
}
}
}
}
}
Imports System.Collections
Imports System.ComponentModel
Imports System.Drawing
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Namespace Samples.AspNet.VB.Controls
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Class TextDisplayWebPart
Inherits WebPart
Private _contentText As String = Nothing
Private _fontStyle As String = Nothing
Private input As TextBox
Private DisplayContent As Label
Private lineBreak As Literal
Public Overrides Function CreateEditorParts() _
As EditorPartCollection
Dim editorArray As New ArrayList()
Dim edPart as New TextDisplayEditorPart()
edPart.ID = Me.ID & "_editorPart1"
editorArray.Add(edPart)
Dim editorParts As New EditorPartCollection(editorArray)
Return editorParts
End Function
Public Overrides ReadOnly Property WebBrowsableObject() _
As Object
Get
Return Me
End Get
End Property
<Personalizable(), WebBrowsable()> _
Public Property ContentText() As String
Get
Return _contentText
End Get
Set(ByVal value As String)
_contentText = Value
End Set
End Property
<Personalizable(), WebBrowsable()> _
Public Property FontStyle() As String
Get
Return _fontStyle
End Get
Set(ByVal value As String)
_fontStyle = Value
End Set
End Property
Protected Overrides Sub CreateChildControls()
Controls.Clear()
DisplayContent = New Label()
DisplayContent.BackColor = Color.LightBlue
DisplayContent.Text = Me.ContentText
If FontStyle Is Nothing Then
FontStyle = "None"
End If
SetFontStyle(DisplayContent, FontStyle)
Me.Controls.Add(DisplayContent)
lineBreak = New Literal()
lineBreak.Text = "<br />"
Controls.Add(lineBreak)
input = New TextBox()
Me.Controls.Add(input)
Dim update As New Button()
update.Text = "Set Label Content"
AddHandler update.Click, AddressOf Me.submit_Click
Me.Controls.Add(update)
End Sub
Private Sub submit_Click(ByVal sender As Object, _
ByVal e As EventArgs)
' Update the label string.
If input.Text <> String.Empty Then
_contentText = input.Text + "<br />"
input.Text = String.Empty
DisplayContent.Text = Me.ContentText
End If
End Sub
Private Sub SetFontStyle(ByVal label As Label, _
ByVal selectedStyle As String)
If selectedStyle = "Bold" Then
label.Font.Bold = True
label.Font.Italic = False
label.Font.Underline = False
ElseIf selectedStyle = "Italic" Then
label.Font.Italic = True
label.Font.Bold = False
label.Font.Underline = False
ElseIf selectedStyle = "Underline" Then
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
End If
End Sub
' Create a custom EditorPart to edit the WebPart control.
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Private Class TextDisplayEditorPart
Inherits EditorPart
Private _partContentFontStyle As DropDownList
Public Overrides Function ApplyChanges() As Boolean
Dim part As TextDisplayWebPart = CType(WebPartToEdit, _
TextDisplayWebPart)
' Update the custom WebPart control with the font style.
part.FontStyle = PartContentFontStyle.SelectedValue
Return True
End Function
Public Overrides Sub SyncChanges()
Dim part As TextDisplayWebPart = CType(WebPartToEdit, _
TextDisplayWebPart)
Dim currentStyle As String = part.FontStyle
' Select the current font style in the drop-down control.
Dim item As ListItem
For Each item In PartContentFontStyle.Items
If item.Value = currentStyle Then
item.Selected = True
Exit For
End If
Next item
End Sub
Protected Overrides Sub 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)
End Sub
Protected Overrides Sub RenderContents(ByVal writer _
As HtmlTextWriter)
writer.Write("<b>Text Content Font Style</b>")
writer.WriteBreak()
writer.Write("Select a font style.")
writer.WriteBreak()
_partContentFontStyle.RenderControl(writer)
writer.WriteBreak()
End Sub
' Access the drop-down control through a property.
Private ReadOnly Property PartContentFontStyle() As DropDownList
Get
EnsureChildControls()
Return _partContentFontStyle
End Get
End Property
End Class
End Class
End Namespace
La deuxième partie de l’exemple de code est une page Web qui héberge le contrôle personnalisé. Notez que bien qu’un EditorZone contrôle soit déclaré dans le balisage de la page, le contrôle personnalisé EditorPart n’a pas besoin d’y être référencé, car il peut être ajouté par programmation au moment de l’exécution.
<%@ 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>
<%@ page language="vb" %>
<%@ register TagPrefix="uc1"
TagName="DisplayModeUC"
Src="DisplayModeUCvb.ascx" %>
<%@ register tagprefix="aspSample"
Namespace="Samples.AspNet.VB.Controls"
Assembly="TextDisplayWebPartVB" %>
<!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>
La troisième partie de l’exemple de code est un contrôle utilisateur qui permet à un utilisateur de basculer la page en mode édition. Notez que le contrôle utilisateur est référencé dans la page Web d’hébergement. Pour obtenir une description complète de la création de ce contrôle utilisateur, consultez Procédure pas à pas : modification des modes d’affichage sur une page de composants WebPart.
<%@ 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>
<%@ control language="vb" classname="DisplayModeMenu"%>
<script runat="server">
' On initial load, fill the dropdown with display modes.
Sub DisplayModeDropdown_Load(ByVal sender As Object, _
ByVal e As System.EventArgs)
If Not IsPostBack Then
Dim mgr As WebPartManager = _
WebPartManager.GetCurrentWebPartManager(Page)
Dim browseModeName As String = _
WebPartManager.BrowseDisplayMode.Name
' Use a sorted list so the modes are sorted alphabetically.
Dim itemArray As New SortedList(mgr.SupportedDisplayModes.Count)
' Add display modes only if they are supported on the page.
Dim mode As WebPartDisplayMode
For Each mode In mgr.SupportedDisplayModes
Dim modeName As String = mode.Name
itemArray.Add(modeName, modeName + " Mode")
Next mode
' Fill the dropdown with the display mode names.
Dim arrayItem As DictionaryEntry
For Each arrayItem In itemArray
Dim item As New ListItem(arrayItem.Value.ToString(), _
arrayItem.Key.ToString())
If item.Value = browseModeName Then
item.Selected = True
End If
DisplayModeDropdown.Items.Add(item)
Next arrayItem
End If
End Sub
' Change the page to the selected display mode.
Sub DisplayModeDropdown_SelectedIndexChanged(ByVal sender As Object, _
ByVal e As EventArgs)
Dim mgr As WebPartManager = _
WebPartManager.GetCurrentWebPartManager(Page)
Dim selectedMode As String = DisplayModeDropdown.SelectedValue
Dim mode As WebPartDisplayMode
For Each mode In mgr.SupportedDisplayModes
If selectedMode = mode.Name Then
mgr.DisplayMode = mode
Exit For
End If
Next mode
End Sub
</script>
<div>
<asp:DropDownList ID="DisplayModeDropdown"
runat="server"
AutoPostBack="true"
OnLoad="DisplayModeDropdown_Load"
OnSelectedIndexChanged="DisplayModeDropdown_SelectedIndexChanged" />
</div>
Pour exécuter l’exemple de code, chargez la page Web d’hébergement dans un navigateur, ajoutez du texte à la zone de texte, puis cliquez sur le bouton Définir le contenu de l’étiquette pour mettre à jour l’étiquette dans le contrôle. Pour basculer la page en mode édition, sélectionnez Modifier dans la liste déroulante contenant les modes d’affichage. Pour afficher l’interface utilisateur à partir du contrôle personnalisé TextDisplayEditorPart
, cliquez sur la flèche déroulante du menu verbes du TextDisplayWebPart
contrôle, puis sélectionnez Modifier. Dans l’interface utilisateur de modification, vous pouvez utiliser la liste déroulante contenant les styles de police pour mettre à jour le style de texte de l’étiquette dans le TextDisplayWebPart
contrôle. Vous devez cliquer sur Mode de navigation dans la liste déroulante modes d’affichage pour renvoyer la page à l’affichage normal et confirmer que le texte de l’étiquette a désormais le style de police que vous avez sélectionné en mode édition.
Remarques
L’interface IWebEditable vous permet d’associer des contrôles personnalisés EditorPart à un contrôle serveur, tel qu’un WebPart contrôle, un contrôle utilisateur ou un contrôle serveur personnalisé. Les EditorPart contrôles sont contenus avec un EditorZone contrôle, et cette zone avec ses contrôles de modification fournit aux utilisateurs finaux une interface utilisateur pour modifier les propriétés, l’apparence et le comportement du contrôle associé WebPart .
L’interface IWebEditable comprend deux membres exposés. La WebBrowsableObject propriété permet aux contrôles d’obtenir EditorPart une référence au contrôle serveur associé. La CreateEditorParts méthode est utilisée pour créer une instance de chaque contrôle personnalisé EditorPart associé à un contrôle serveur et les renvoyer en tant que collection.
L’interface IWebEditable est déjà implémentée sur la classe de base WebPart , même si, par défaut, cette implémentation n’associe aucun contrôle personnalisé EditorPart à la WebPart classe . Pour associer un contrôle dérivé WebPart à des contrôles personnalisés EditorPart , vous pouvez remplacer la CreateEditorParts méthode .
Notes pour les responsables de l’implémentation
Si vous souhaitez utiliser des contrôles serveur qui ne sont pas WebPart des contrôles dans une application De composants WebPart (autrement dit, si vous ajoutez ces contrôles à une WebPartZoneBase zone), et si vous souhaitez associer des contrôles personnalisés EditorPart à ces contrôles de serveur, vous devez implémenter l’interface IWebEditable . Les contrôles dérivés WebPart ne doivent pas implémenter l’interface, car la classe de base WebPart le fait déjà.
Propriétés
WebBrowsableObject |
Obtient une référence au contrôle WebPart, au contrôle utilisateur ou au contrôle personnalisé qui sera modifié par les contrôles EditorPart. |
Méthodes
CreateEditorParts() |
Retourne une collection de contrôles EditorPart personnalisés associés à un contrôle serveur qui implémente l'interface IWebEditable. |