IWebPart 인터페이스

정의

ASP.NET WebPart 컨트롤에서 사용되는 공용 UI(사용자 인터페이스) 속성을 정의합니다.

public interface class IWebPart
public interface IWebPart
type IWebPart = interface
Public Interface IWebPart
파생

예제

다음 코드 예제에서는 사용자 컨트롤에서 인터페이스를 IWebPart 구현 하는 방법을 보여 줍니다. 속성을 구현하는 방법을 최소한으로 보여 주는 간단한 구현입니다.

코드 예제의 첫 번째 부분은 사용자 컨트롤을 보여줍니다. 사용자 컨트롤은 인터페이스의 모든 속성과 사용자 인터페이스의 IWebPart 컨트롤에 연결된 두 개의 추가 공용 속성을 구현합니다. 두 사용자 지정 속성은 각각 특성을 사용 Personalizable 하므로 이러한 속성의 값을 브라우저 세션 간에 저장할 수 있습니다. 기본 WebPart 클래스 구현에서 인터페이스의 IWebPart 모든 속성은 이 코드 예제에는 없지만 개인 설정 가능으로 구현됩니다.

<%@ control language="C#" classname="AccountUserControlCS"%>
<%@ implements interface="System.Web.UI.WebControls.WebParts.IWebPart" %>

<script runat="server">

  private string m_Description;
  private string m_Title;
  private string m_TitleIconImageUrl;
  private string m_TitleUrl;
  private string m_CatalogIconImageUrl;
  
  [Personalizable]
  public string UserName
  {
    get
    {
      if(String.IsNullOrEmpty(Textbox1.Text))
        return String.Empty;
      else
        return Textbox1.Text;
    }
    
    set
    {
      Textbox1.Text = value;
    }
  }
    
  [Personalizable]
  public string Phone
  {
    get
    {
      if(String.IsNullOrEmpty(Textbox2.Text))
        return String.Empty;
      else
        return Textbox2.Text;
    }
    
    set
    {
      Textbox2.Text = value;
    }
  }

  // <snippet3>
  public string Description
  {
    get
    {
      object objTitle = ViewState["Description"];
      if (objTitle == null)
        return String.Empty;

      return (string)objTitle;
    }
    set
    {
      ViewState["Description"] = value;
    }
  }
  // </snippet3>

  // <snippet4>
  public string Title
  {
    get
    {
      object objTitle = ViewState["Title"];
      if (objTitle == null)
        return String.Empty;

      return (string)objTitle;
    }
    set
    {
      ViewState["Title"] = value;
    }
  }
  // </snippet4>

  // <snippet5>
  public string Subtitle
  {
    get
    {
      object objSubTitle = ViewState["Subtitle"];
      if (objSubTitle == null)
        return "My Subtitle";

      return (string)objSubTitle;
    }

  }
  // </snippet5>

  // <snippet6>
  public string TitleIconImageUrl
  {
    get
    {
      object objTitle = ViewState["TitleIconImageUrl"];
      if (objTitle == null)
        return String.Empty;

      return (string)objTitle;
    }
    set
    {
      ViewState["TitleIconImageUrl"] = value;
    }
  }
  // </snippet6>

  // <snippet7>
  public string TitleUrl
  {
    get
    {
      object objTitle = ViewState["TitleUrl"];
      if (objTitle == null)
        return String.Empty;

      return (string)objTitle;
    }
    set
    {
      ViewState["TitleUrl"] = value;
    }
  }
  // </snippet7>

  // <snippet8>
  public string CatalogIconImageUrl
  {
    get
    {
      object objTitle = ViewState["CatalogIconImageUrl"];
      if (objTitle == null)
        return String.Empty;

      return (string)objTitle;
    }
    set
    {
      ViewState["CatalogIconImageUrl"] = value;
    }
  }
  // </snippet8>
  
  // <snippet9>
  // Update the selected IWebPart property value.
  void Button1_Click(object sender, EventArgs e)
  {
    String propertyValue = Server.HtmlEncode(TextBox3.Text);
    TextBox3.Text = String.Empty;

    switch (RadioButtonList1.SelectedValue)
    {
      case "title":
        this.Title = propertyValue;
        break;
      case "description":
        this.Description = propertyValue;
        break;
      case "catalogiconimageurl":
        this.CatalogIconImageUrl = propertyValue;
        break;
      case "titleiconimageurl":
        this.TitleIconImageUrl = propertyValue;
        break;
      case "titleurl":
        this.TitleUrl = propertyValue;
        break;
      default:
        break;
    }
  }
  // </snippet9>
  
</script>
<div>
<asp:label id="Label1" runat="server" AssociatedControlID="Textbox1">
  Name</asp:label>
<asp:textbox id="Textbox1" runat="server" />
</div>
<div>
<asp:label id="Label2" runat="server" AssociatedControlID="Textbox2">
  Phone</asp:label>
<asp:textbox id="Textbox2" runat="server"></asp:textbox>
</div>
<div>
<asp:button id="Button2" runat="server" text="Save Form Values" />
</div>
<hr />
<asp:Label ID="Label3" Runat="server" Text="Label" 
  AssociatedControlID="RadioButtonList1">
  <h3>Update selected IWebPart property values.</h3>
</asp:Label>
<asp:RadioButtonList ID="RadioButtonList1" Runat="server">
  <asp:ListItem Value="title">Title</asp:ListItem>
  <asp:ListItem Value="description">Description</asp:ListItem>
  <asp:ListItem Value="catalogiconimageurl">CatalogIconImageUrl</asp:ListItem>
  <asp:ListItem Value="titleiconimageurl">TitleIconImageUrl</asp:ListItem>
  <asp:ListItem Value="titleurl">TitleUrl</asp:ListItem>
</asp:RadioButtonList>
<br />
<asp:Label ID="Label4" runat="server" Text="Label"
  AssociatedControlID="TextBox3">
Property Value:  
</asp:Label>
<asp:TextBox ID="TextBox3" runat="server">
</asp:TextBox>  
<br />  
<asp:Button ID="Button1" runat="server" 
  Text="Update Property" 
  OnClick="Button1_Click">
</asp:Button>
<%@ control language="VB" classname="AccountUserControlVB"%>
<%@ implements interface="System.Web.UI.WebControls.WebParts.IWebPart" %>

<script runat="server">

  Private m_Description As String
  Private m_Title As String
  Private m_TitleIconImageUrl As String
  Private m_TitleUrl As String
  Private m_CatalogIconImageUrl As String


  <Personalizable()> _
  Public Property UserName() As String
    Get
      If String.IsNullOrEmpty(Textbox1.Text) Then
        Return String.Empty
      Else
        Return Textbox1.Text
      End If
    End Get
    Set(ByVal value As String)
      Textbox1.Text = Value
    End Set
  End Property

  <Personalizable()> _
  Public Property Phone() As String
    Get
      If String.IsNullOrEmpty(Textbox2.Text) Then
        Return String.Empty
      Else
        Return Textbox2.Text
      End If
    End Get
    Set(ByVal value As String)
      Textbox2.Text = Value
    End Set
  End Property

  ' <snippet3>
  Public Property Description() As String _
    Implements IWebPart.Description
    Get
      Dim objTitle As Object = ViewState("Description")
      If objTitle Is Nothing Then
        Return String.Empty
      End If
      Return CStr(objTitle)
    End Get
    Set(ByVal value As String)
      ViewState("Description") = value
    End Set
  End Property
  ' </snippet3>
  
  ' <snippet4>
  Public Property Title() As String _
    Implements IWebPart.Title
    Get
      Dim objTitle As Object = ViewState("Title")
      If objTitle Is Nothing Then
        Return String.Empty
      End If
      Return CStr(objTitle)
    End Get
    Set(ByVal value As String)
      ViewState("Title") = value
    End Set
  End Property
  ' </snippet4>
  
  ' <snippet5>
  ReadOnly Property Subtitle() As String _
    Implements IWebPart.Subtitle
    Get
      Dim objSubTitle As Object = ViewState("Subtitle")
      If objSubTitle Is Nothing Then
        Return "My Subtitle"
      End If
      Return CStr(objSubTitle)
    End Get
  End Property
  ' </snippet5>
  
  ' <snippet6>
  Public Property TitleIconImageUrl() As String _
    Implements IWebPart.TitleIconImageUrl
    Get
      Dim objTitle As Object = ViewState("TitleIconImageUrl")
      If objTitle Is Nothing Then
        Return String.Empty
      End If
      Return CStr(objTitle)
    End Get
    Set(ByVal value As String)
      ViewState("TitleIconImageUrl") = value
    End Set
  End Property
  ' </snippet6>
  
  ' <snippet7>
  Public Property TitleUrl() As String _
    Implements IWebPart.TitleUrl
    Get
      Dim objTitle As Object = ViewState("TitleUrl")
      If objTitle Is Nothing Then
        Return String.Empty
      End If
      Return CStr(objTitle)
    End Get
    Set(ByVal value As String)
      ViewState("TitleUrl") = value
    End Set
  End Property
  ' </snippet7>
  
  ' <snippet8>
  Public Property CatalogIconImageUrl() As String _
    Implements IWebPart.CatalogIconImageUrl
    Get
      Dim objTitle As Object = ViewState("CatalogIconImageUrl")
      If objTitle Is Nothing Then
        Return String.Empty
      End If
      Return CStr(objTitle)
    End Get
    Set(ByVal value As String)
      ViewState("CatalogIconImageUrl") = value
    End Set
  End Property
  ' </snippet8>
  
  ' <snippet9>
  ' Update the selected IWebPart property value.
  Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
    Dim propertyValue As String = Server.HtmlEncode(TextBox3.Text)
    TextBox3.Text = String.Empty
      
    Select Case RadioButtonList1.SelectedValue
      Case "title"
        Me.Title = propertyValue
      Case "description"
        Me.Description = propertyValue
      Case "catalogiconimageurl"
        Me.CatalogIconImageUrl = propertyValue
      Case "titleiconimageurl"
        Me.TitleIconImageUrl = propertyValue
      Case "titleurl"
        Me.TitleUrl = propertyValue
      Case Else
    End Select

  End Sub 'Button1_Click
  ' </snippet9>
  
</script>
<div>
<asp:label id="Label1" runat="server" AssociatedControlID="Textbox1">
  Name</asp:label>
<asp:textbox id="Textbox1" runat="server" />
</div>
<div>
<asp:label id="Label2" runat="server" AssociatedControlID="Textbox2">
  Phone</asp:label>
<asp:textbox id="Textbox2" runat="server"></asp:textbox>
</div>
<div>
<asp:button id="Button2" runat="server" text="Save Form Values" />
</div>
<hr />
<asp:Label ID="Label3" Runat="server" AssociatedControlID="RadioButtonList1">
  <h3>Update selected IWebPart property values.</h3>
</asp:Label>
<asp:RadioButtonList ID="RadioButtonList1" Runat="server">
  <asp:ListItem Value="title">Title</asp:ListItem>
  <asp:ListItem Value="description">Description</asp:ListItem>
  <asp:ListItem Value="catalogiconimageurl">CatalogIconImageUrl</asp:ListItem>
  <asp:ListItem Value="titleiconimageurl">TitleIconImageUrl</asp:ListItem>
  <asp:ListItem Value="titleurl">TitleUrl</asp:ListItem>
</asp:RadioButtonList>
<br />
<asp:Label ID="Label4" runat="server" AssociatedControlID="TextBox3">
Property Value:  
</asp:Label>
<asp:TextBox ID="TextBox3" runat="server">
</asp:TextBox>  
<br />  
<asp:Button ID="Button1" runat="server" 
  Text="Update Property" 
  OnClick="Button1_Click">
</asp:Button>

코드 예제의 두 번째 부분에서는 사용자 컨트롤을 호스트하는 웹 페이지를 보여 줍니다. 페이지에는 사용자 컨트롤이 WebPartZone 참조되는 컨트롤이 있습니다. 인터페이스의 속성 값 중 IWebPart 일부는 사용자 컨트롤에 대한 태그에서 선언적으로 설정되므로 디자인 타임 및 런타임에 컨트롤과 비슷하게 동작하고 표시할 WebPart 수 있습니다. 브라우저에서 페이지를 로드하는 경우 페이지의 UI를 사용하여 런타임에 구현된 IWebPart 속성의 값을 프로그래밍 방식으로 변경하는 기능을 보여 줄 수 있습니다. 속성 값의 일부를 변경 하면 변경 내용을 페이지에 분명히 나타나지 않지만 페이지 소스에 표시 됩니다 (합니다 TitleIconImageUrl 속성), 또는 애플리케이션의 상태 데이터에 저장 됩니다 (의 CatalogIconImageUrl 속성).

중요

이 예제에는 사용자 입력을 허용하는 텍스트 상자가 있으므로 보안상 위험할 수 있습니다. 기본적으로 ASP.NET 웹 페이지는 사용자 입력 내용에 스크립트 또는 HTML 요소가 포함되어 있지 않은지 확인합니다. 자세한 내용은 Script Exploits Overview를 참조하세요.

<%@ page language="c#" %>
<%@ register tagprefix="uc1" 
    tagname="AccountUserControlCS" 
    src="AccountUserControlcs.ascx"%>
<!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>
      Personalizable User Control with IWebPart Properties
    </title>
  </head>
  <body>
    <form id="form1" runat="server">
      <asp:webpartmanager id="WebPartManager1" runat="server" />
      <asp:webpartzone 
        id="zone1" 
        runat="server" 
        headertext="Main" 
        CloseVerb-Enabled="false">
        <zonetemplate>
          <uc1:AccountUserControlCS 
            runat="server" 
            id="accountwebpart" 
            title="Account Form"
            Description="Account Form with default values."
            CatalogIconImageUrl="MyCatalogIcon.gif"
            TitleIconImageUrl="MyTitleIcon.gif"
            TitleUrl="MyUrl.html"/>
        </zonetemplate>
      </asp:webpartzone>    
    </form>
  </body>
</html>
<%@ page language="VB" %>
<%@ register tagprefix="uc1" 
    tagname="AccountUserControlVB" 
    src="AccountUserControlvb.ascx"%>
<!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>
      Personalizable User Control with IWebPart Properties
    </title>
  </head>
  <body>
    <form id="form1" runat="server">
      <asp:webpartmanager id="WebPartManager1" runat="server" />
      <asp:webpartzone 
        id="zone1" 
        runat="server" 
        headertext="Main" 
        CloseVerb-Enabled="false">
        <zonetemplate>
          <uc1:AccountUserControlVB 
            runat="server" 
            id="accountwebpart" 
            title="Account Form"
            Description="Account Form with default values."
            CatalogIconImageUrl="MyCatalogIcon.gif"
            TitleIconImageUrl="MyTitleIcon.gif"
            TitleUrl="MyUrl.html"/>
        </zonetemplate>
      </asp:webpartzone>    
    </form>
  </body>
</html>

설명

인터페이스는 IWebPart 컨트롤을 사용하는 WebPart 사용자 환경을 향상시키는 몇 가지 UI 지향 속성을 제공합니다. 기본 클래스에서 파생되는 컨트롤을 만들 때 기본 WebPart 클래스가 이 인터페이스를 구현하기 때문에 WebPart 인터페이스의 모든 속성 IWebPart 이 구현됩니다.

기존 사용자 컨트롤, ASP.NET 컨트롤 또는 사용자 지정 서버 컨트롤에서 상속 하지 않는 사용할 수는 WebPart 클래스는 웹 파트 애플리케이션의 일부로 있으며에서 선언 된 이러한 UI 기반 속성을 사용할 수 있습니다는 IWebPart 인터페이스입니다. 기존 서버 컨트롤을 WebPartZoneBase 영역에 배치하는 경우 런타임에 개체로 GenericWebPart 래핑됩니다. 클래스는 GenericWebPart 기본 클래스에서 WebPart 상속되므로 기존 서버 컨트롤이 true WebPart 컨트롤로 작동할 수 있으며 인터페이스의 IWebPart 속성을 추가합니다.

영역에 컨트롤이 아닌 WebPart 서버 컨트롤을 배치하는 경우 런타임에 속성을 사용할 IWebPart 수 있으며 페이지 태그(페이지 지속성 형식)에서 서버 컨트롤의 해당 속성에 대한 값을 선언할 수도 있습니다. 그러나 이러한 속성은 런타임에 서버 컨트롤에서만 사용할 수 있으므로 IntelliSense와 같은 디자인 타임 코딩 기능은 서버 컨트롤에 선언된 속성을 인식하지 IWebPart 않습니다. 이러한 컨트롤에서 선언된 속성은 페이지를 로드할 때 계속 작동하지만 Microsoft Visual Studio에서는 디자인 타임에 속성이 유효한 것으로 인식되지 않습니다. 기존 서버 및 사용자 컨트롤에 IWebPart 속성을 추가하여 디자인 타임 사용자 환경을 향상하려는 경우 서버 컨트롤에서 인터페이스를 구현 IWebPart 할 수 있습니다.

인터페이스를 구현 IWebPart 하는 주된 이유는 expando(사용자 지정) 속성 사용을 지원하지 않는 컨트롤에 대한 것입니다. Expando 속성은 인터페이스를 통해 클래스에 동적으로 속성으로 추가할 수 있는 IAttributeAccessor 문자열입니다. 클래스 및 해당 자식을 포함하여 이 인터페이스를 WebControl 구현하는 컨트롤은 expando 속성을 사용할 수 있습니다. 따라서 모든 ASP.NET 서버 컨트롤, 해당 컨트롤에서 파생되는 사용자 지정 컨트롤, 웹 사용자 컨트롤 및 WebPart 컨트롤은 expando 속성 사용을 지원합니다. 그러나 기본 Control 클래스에서 직접 상속되는 사용자 지정 컨트롤은 expando 속성을 지원하지 않습니다. 따라서 내에서 이러한 컨트롤을 WebPartZone선언하는 경우 컨트롤의 공용 IWebPart 속성( 예: TitleDescription)을 선언할 수 없습니다. 이러한 컨트롤에서 이러한 속성을 사용하려면 인터페이스를 IWebPart 구현해야 합니다.

구현자 참고

기본 클래스가 이미 인터페이스를 IWebPart 구현하므로 일반적으로 사용자 지정 WebPart 컨트롤 또는 서버 컨트롤 WebPart 에서 인터페이스를 구현할 필요가 없습니다. 사용자 지정 WebPart 컨트롤 및 영역에 배치 WebPartZoneBase 된 다른 서버 컨트롤은 모든 IWebPart 속성을 사용할 수 있습니다.

사용자 지정 WebPart 컨트롤 또는 다른 서버 컨트롤에서 인터페이스를 직접 구현 IWebPart 하는 주된 이유는 기본 구현을 변경하려는 경우입니다. 예를 들어 일부 속성에 대한 기본값을 제공할 수 있습니다. 사용자 또는 서버 컨트롤에서 인터페이스를 구현하는 또 다른 이유는 컨트롤에서 이러한 속성을 사용하는 디자인 타임 환경이 향상되기 때문입니다.

속성

CatalogIconImageUrl

컨트롤 카탈로그에서 WebPart 컨트롤을 나타내는 이미지의 URL을 가져오거나 설정합니다.

Description

WebPart 컨트롤의 도구 설명과 카탈로그에 사용하기 위해 컨트롤의 용도를 요약한 간략한 문구를 가져오거나 설정합니다.

Subtitle

Title 컨트롤의 전체 제목을 구성하기 위해 WebPart 속성 값에 연결된 문자열을 가져옵니다.

Title

WebPart 컨트롤의 제목을 가져오거나 설정합니다.

TitleIconImageUrl

컨트롤의 자체 제목 표시줄에서 웹 파트 컨트롤을 나타내는 데 사용되는 이미지의 URL을 가져오거나 설정합니다.

TitleUrl

WebPart 컨트롤에 대한 추가 정보의 URL을 가져오거나 설정합니다.

적용 대상

추가 정보