IWebEditable Interface
Definição
public interface class IWebEditable
public interface IWebEditable
type IWebEditable = interface
Public Interface IWebEditable
- Derivado
Exemplos
O exemplo de código a seguir demonstra como substituir os métodos da IWebEditable interface em um WebPart controle personalizado, que, em seguida, cria uma instância de um EditorPart controle personalizado quando o WebPart controle entra no modo de edição.The following code example demonstrates how to override the methods of the IWebEditable interface in a custom WebPart control, which then creates an instance of a custom EditorPart control when the WebPart control enters edit mode.
Este exemplo tem quatro partes:This example has four parts:
O código para a classe personalizada.The code for the custom class.
A página da Web que hospeda o controle personalizado.The Web page that hosts the custom control.
Um controle de usuário que alterna a página para o modo de edição.A user control that switches the page into edit mode.
Uma descrição de como o exemplo funciona em um navegador.A description of how the example works in a browser.
A primeira parte do exemplo de código é a TextDisplayWebPart classe personalizada.The first part of the code example is the custom TextDisplayWebPart class. Observe que a classe deriva da WebPart classe e implementa a IWebEditable interface, fornecendo implementações específicas para o CreateEditorParts método e a WebBrowsableObject propriedade.Notice that the class derives from the WebPart class and implements the IWebEditable interface, providing specific implementations for the CreateEditorParts method and the WebBrowsableObject property. Observe também que o aninhado dentro da TextDisplayWebPart classe é uma classe privada e personalizada TextDisplayEditorPart que deriva da EditorPart classe base.Notice also that nested within the TextDisplayWebPart class is a private, custom TextDisplayEditorPart class that derives from the base EditorPart class. Para que o exemplo de código seja executado, você deve compilar esse código-fonte.For the code example to run, you must compile this source code. Você pode compilá-lo explicitamente e colocar o assembly resultante na pasta bin do seu site ou no cache de assembly global.You can compile it explicitly and put the resulting assembly in your Web site's Bin folder or the global assembly cache. Como alternativa, você pode colocar o código-fonte na pasta App_Code do seu site, onde ele será compilado dinamicamente em tempo de execução.Alternatively, you can put the source code in your site's App_Code folder, where it will be dynamically compiled at run time. Para obter instruções que demonstram os dois métodos de compilação, consulte passo a passos: desenvolvendo e usando um controle de servidor Web personalizado.For a walkthrough that demonstrates both methods of compiling, see Walkthrough: Developing and Using a Custom Web Server Control.
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
A segunda parte do exemplo de código é uma página da Web que hospeda o controle personalizado.The second part of the code example is a Web page that hosts the custom control. Observe que, embora um EditorZone controle seja declarado na marcação da página, o controle personalizado EditorPart não precisa ser referenciado lá, pois pode ser adicionado programaticamente em tempo de execução.Notice that although an EditorZone control is declared in the markup of the page, the custom EditorPart control need not be referenced there, because it can be added programmatically at run time.
<%@ 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>
A terceira parte do exemplo de código é um controle de usuário que permite que um usuário alterne a página para o modo de edição.The third part of the code example is a user control that enables a user to switch the page into edit mode. Observe que o controle de usuário é referenciado na página da Web de hospedagem.Notice that the user control is referenced in the hosting Web page. Para obter uma descrição completa de como criar esse controle de usuário, consulte Walkthrough: Alterando modos de exibição em uma página de Web Parts.For a full description of how to create this user control, see Walkthrough: Changing Display Modes on a Web Parts Page.
<%@ 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>
Para executar o exemplo de código, carregue a página da Web de hospedagem em um navegador, adicione texto à caixa de texto e clique no botão definir conteúdo do rótulo para atualizar o rótulo no controle.To run the code example, load the hosting Web page in a browser, add some text to the text box, and click the Set Label Content button to update the label in the control. Para alternar a página para o modo de edição, selecione Editar na lista suspensa que contém os modos de exibição.To switch the page into edit mode, select Edit from the drop-down list containing the display modes. Para exibir a interface do usuário do TextDisplayEditorPart controle personalizado, clique na seta suspensa do menu de verbos no TextDisplayWebPart controle e selecione Editar.To display the UI from the custom TextDisplayEditorPart control, click the verbs menu drop-down arrow on the TextDisplayWebPart control, and select Edit. Na interface do usuário de edição, você pode usar a lista suspensa que contém os estilos de fonte para atualizar o estilo de texto para o rótulo no TextDisplayWebPart controle.In the editing UI, you can use the drop-down list containing the font styles to update the text style for the label in the TextDisplayWebPart control. Você deve clicar no modo de procura na lista suspensa modos de exibição para retornar a página para a exibição normal e confirmar que o texto no rótulo agora tem o estilo de fonte que você selecionou no modo de edição.You must click Browse Mode in the display modes drop-down list to return the page to normal view and confirm that the text in the label now has the font style you selected while in edit mode.
Comentários
A IWebEditable interface permite que você associe controles personalizados a EditorPart um controle de servidor, como um WebPart controle, um controle de usuário ou um controle de servidor personalizado.The IWebEditable interface enables you to associate custom EditorPart controls with a server control--such as a WebPart control, a user control, or a custom server control. Os EditorPart controles são contidos em um EditorZone controle, e essa zona com seus controles de edição fornece aos usuários finais uma interface do usuário para modificar propriedades, aparência e comportamento no WebPart controle associado.The EditorPart controls are contained with an EditorZone control, and this zone with its editing controls provides end users with a user interface (UI) for modifying properties, appearance, and behavior on the associated WebPart control.
A IWebEditable interface inclui dois membros expostos.The IWebEditable interface includes two exposed members. A WebBrowsableObject propriedade fornece uma maneira de EditorPart controles para obter uma referência ao controle de servidor associado.The WebBrowsableObject property provides a way for EditorPart controls to get a reference to the associated server control. O CreateEditorParts método é usado para criar uma instância de cada EditorPart controle personalizado associado a um controle de servidor e retorná-los como uma coleção.The CreateEditorParts method is used to create an instance of each custom EditorPart control associated with a server control, and return them as a collection.
A IWebEditable interface já está implementada na WebPart classe base, embora por padrão essa implementação não associe nenhum controle personalizado EditorPart à WebPart classe.The IWebEditable interface is already implemented on the base WebPart class, although by default this implementation does not associate any custom EditorPart controls with the WebPart class. Para associar um controle derivado a WebPart EditorPart controles personalizados, você pode substituir o CreateEditorParts método.To associate a derived WebPart control with custom EditorPart controls, you can override the CreateEditorParts method.
Notas aos Implementadores
Se você quiser usar controles de servidor que não são WebPart controles em um aplicativo Web Parts (ou seja, se você adicionar esses controles a uma WebPartZoneBase zona) e se quiser associar controles personalizados a EditorPart esses controles de servidor, será necessário implementar a IWebEditable interface.If you want to use server controls that are not WebPart controls in a Web Parts application (that is, if you add these controls to a WebPartZoneBase zone), and if you want to associate custom EditorPart controls with such server controls, you need to implement the IWebEditable interface. Os WebPart controles derivados não devem implementar a interface, pois a WebPart classe base já faz isso.Derived WebPart controls should not implement the interface, because the base WebPart class already does so.
Propriedades
| WebBrowsableObject |
Obtém uma referência ao controle WebPart, ao controle de usuário ou a um controle personalizado que será editado por controles EditorPart.Gets a reference to the WebPart control, user control, or custom control that will be edited by EditorPart controls. |
Métodos
| CreateEditorParts() |
Retorna uma coleção de controles EditorPart personalizados associados a um controle de servidor que implementa a interface IWebEditable.Returns a collection of custom EditorPart controls associated with a server control that implements the IWebEditable interface. |