IWebEditable Interface
Provides an interface for developers to specify custom editing controls that are associated with a WebPart control.
Assembly: System.Web (in System.Web.dll)
| Name | Description | |
|---|---|---|
![]() | WebBrowsableObject | Gets a reference to the WebPart control, user control, or custom control that will be edited by EditorPart controls. |
| Name | Description | |
|---|---|---|
![]() | CreateEditorParts() | Returns a collection of custom EditorPart controls associated with a server control that implements the IWebEditable interface. |
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. 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.
The IWebEditable interface includes two exposed members. The WebBrowsableObject property provides a way for EditorPart controls to get a reference to the associated server control. 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.
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. To associate a derived WebPart control with custom EditorPart controls, you can override the CreateEditorParts method.
Notes to Implementers:
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. Derived WebPart controls should not implement the interface, because the base WebPart class already does so.
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.
This example has four parts:
The code for the custom class.
The Web page that hosts the custom control.
A user control that switches the page into edit mode.
A description of how the example works in a browser.
The first part of the code example is the custom TextDisplayWebPart class. 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. Notice also that nested within the TextDisplayWebPart class is a private, custom TextDisplayEditorPart class that derives from the base EditorPart class. For the code example to run, you must compile this source code. You can compile it explicitly and put the resulting assembly in your Web site's Bin folder or the global assembly cache. Alternatively, you can put the source code in your site's App_Code folder, where it will be dynamically compiled at run time. For a walkthrough that demonstrates both methods of compiling, see Walkthrough: Developing and Using a Custom Web Server Control.
Imports System 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
The second part of the code example is a Web page that hosts the custom control. 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="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>
The third part of the code example is a user control that enables a user to switch the page into edit mode. Notice that the user control is referenced in the hosting Web page. For a full description of how to create this user control, see Walkthrough: Changing Display Modes on a Web Parts Page.
<%@ 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>
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. To switch the page into edit mode, select Edit from the drop-down list containing the display modes. To display the UI from the custom TextDisplayEditorPart control, click the verbs menu drop-down arrow on the TextDisplayWebPart control, and select Edit. 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. 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.
Available since 2.0

