IWebEditable 인터페이스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
WebPart 컨트롤과 연결된 사용자 지정 편집 컨트롤을 지정하기 위한 개발자용 인터페이스를 제공합니다.
public interface class IWebEditable
public interface IWebEditable
type IWebEditable = interface
Public Interface IWebEditable
- 파생
예제
다음 코드 예제에서는 재정의 하는 방법을 보여 줍니다는 인터페이스의 메서드를 재정의 IWebEditable 하는 사용자 지정 WebPart 컨트롤을 컨트롤이 편집 모드로 들어갈 때 WebPart 사용자 지정 EditorPart 컨트롤의 인스턴스를 만듭니다.
이 예제에는 네 부분으로 구성합니다.
사용자 지정 클래스의 코드입니다.
사용자 지정 컨트롤을 호스트하는 웹 페이지입니다.
페이지를 편집 모드로 전환하는 사용자 컨트롤입니다.
예제가 브라우저에서 작동하는 방식에 대한 설명입니다.
코드 예제의 첫 번째 부분은 사용자 지정 TextDisplayWebPart
클래스입니다. 클래스는 클래스에서 WebPart 파생되고 인터페이스를 IWebEditable 구현하여 메서드 및 속성에 대한 특정 구현을 CreateEditorPartsWebBrowsableObject 제공합니다. 또한 클래스 내에 TextDisplayWebPart
중첩된 는 기본 EditorPart 클래스에서 파생되는 프라이빗 사용자 지정 TextDisplayEditorPart
클래스입니다. 코드 예제를 실행하려면 이 소스 코드를 컴파일해야 합니다. 명시적으로 컴파일하고 결과 어셈블리를 웹 사이트의 Bin 폴더 또는 전역 어셈블리 캐시에 넣을 수 있습니다. 또는 런타임에 동적으로 컴파일되는 사이트의 App_Code 폴더에 소스 코드를 배치할 수 있습니다. 두 가지 컴파일 방법을 모두 보여 주는 연습은 연습: 사용자 지정 웹 서버 컨트롤 개발 및 사용을 참조하세요.
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
코드 예제의 두 번째 부분은 사용자 지정 컨트롤을 호스트하는 웹 페이지입니다. 페이지 태그에 컨트롤이 선언되어 있지만 EditorZone 런타임에 프로그래밍 방식으로 추가할 수 있으므로 사용자 지정 EditorPart 컨트롤을 참조할 필요가 없습니다.
<%@ 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>
코드 예제의 세 번째 부분은 사용자가 페이지를 편집 모드로 전환할 수 있는 사용자 컨트롤입니다. 사용자 컨트롤은 호스팅 웹 페이지에서 참조됩니다. 이 사용자 컨트롤을 만드는 방법에 대한 자세한 내용은 연습: 웹 파트 페이지에서 표시 모드 변경을 참조하세요.
<%@ 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>
코드 예제를 실행하려면 브라우저에서 호스팅 웹 페이지를 로드하고 텍스트 상자에 텍스트를 추가한 다음 레이블 콘텐츠 설정 단추를 클릭하여 컨트롤의 레이블을 업데이트합니다. 페이지를 편집 모드로 전환하려면 표시 모드가 포함된 드롭다운 목록에서 편집 을 선택합니다. 사용자 지정 TextDisplayEditorPart
컨트롤에서 UI를 표시하려면 컨트롤의 동사 메뉴 드롭다운 화살표를 클릭하고 편집을 TextDisplayWebPart
선택합니다. 편집 UI에서 글꼴 스타일이 포함된 드롭다운 목록을 사용하여 컨트롤의 레이블 TextDisplayWebPart
에 대한 텍스트 스타일을 업데이트할 수 있습니다. 표시 모드 드롭다운 목록에서 찾아보기 모드 를 클릭하여 페이지를 일반 보기로 반환하고 레이블의 텍스트에 편집 모드에서 선택한 글꼴 스타일이 있는지 확인해야 합니다.
설명
IWebEditable 인터페이스를 사용하면 사용자 지정 EditorPart 컨트롤을 서버 컨트롤(예: WebPart 컨트롤, 사용자 컨트롤 또는 사용자 지정 서버 컨트롤)과 연결할 수 있습니다. 컨트롤은 EditorPart 컨트롤과 함께 EditorZone 포함되며 편집 컨트롤이 있는 이 영역은 최종 사용자에게 연결된 WebPart 컨트롤의 속성, 모양 및 동작을 수정하기 위한 UI(사용자 인터페이스)를 제공합니다.
인터페이스에는 IWebEditable 노출된 두 멤버가 포함됩니다. 속성은 WebBrowsableObject 컨트롤이 연결된 서버 컨트롤에 대한 참조를 가져오는 방법을 EditorPart 제공합니다. 메서드는 CreateEditorParts 서버 컨트롤과 연결된 각 사용자 지정 EditorPart 컨트롤의 인스턴스를 만들고 컬렉션으로 반환하는 데 사용됩니다.
인터페이스는 IWebEditable 기본 클래스에서 WebPart 이미 구현되어 있지만 기본적으로 이 구현은 클래스와 WebPart 사용자 지정 EditorPart 컨트롤을 연결하지 않습니다. 파생 컨트롤 WebPart 을 사용자 지정 EditorPart 컨트롤과 연결하려면 메서드를 재정의할 CreateEditorParts 수 있습니다.
구현자 참고
되지 않는 서버 컨트롤을 사용 하려는 경우 WebPart 웹 파트 애플리케이션에서 컨트롤 (즉, 이러한 컨트롤을 추가 하는 경우는 WebPartZoneBase 영역)을 연결 하려는 사용자 지정 하는 경우 EditorPart 이러한 서버 컨트롤을 사용 하 여 컨트롤을 해야 구현 된 IWebEditable 인터페이스입니다. 파생된 WebPart 컨트롤은 인터페이스를 구현해서는 안 됩니다. 기본 WebPart 클래스는 이미 구현하기 때문입니다.
속성
WebBrowsableObject |
WebPart 컨트롤에서 편집될 EditorPart 컨트롤, 사용자 정의 컨트롤 또는 사용자 지정 컨트롤에 대한 참조를 가져옵니다. |
메서드
CreateEditorParts() |
EditorPart 인터페이스를 구현하는 서버 컨트롤에 연결된 사용자 지정 IWebEditable 컨트롤의 컬렉션을 반환합니다. |
적용 대상
추가 정보
.NET