Bagikan melalui


IWebPart Antarmuka

Definisi

Menentukan properti antarmuka pengguna (UI) umum yang digunakan oleh kontrol ASP.NET WebPart .

public interface class IWebPart
public interface IWebPart
type IWebPart = interface
Public Interface IWebPart
Turunan

Contoh

Contoh kode berikut menunjukkan cara mengimplementasikan IWebPart antarmuka dalam kontrol pengguna. Ini adalah implementasi sederhana yang menunjukkan minimal cara mengimplementasikan properti.

Bagian pertama dari contoh kode menunjukkan kontrol pengguna. Kontrol pengguna mengimplementasikan semua properti IWebPart antarmuka, ditambah dua properti publik tambahan yang terkait dengan kontrol di antarmuka pengguna. Dua properti kustom masing-masing menggunakan Personalizable atribut , yang memungkinkan nilai dalam properti tersebut disimpan di seluruh sesi browser. Perhatikan bahwa dalam implementasi kelas dasar WebPart , semua properti IWebPart antarmuka diimplementasikan juga dapat dipersonalisasi, meskipun tidak dalam contoh kode ini.

<%@ 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>

Bagian kedua dari contoh kode memperlihatkan halaman Web yang menghosting kontrol pengguna. Halaman memiliki WebPartZone kontrol, di mana kontrol pengguna dirujuk. Perhatikan bahwa beberapa IWebPart nilai properti antarmuka diatur secara deklaratif dalam markup untuk kontrol pengguna, yang memungkinkannya untuk berperilaku dan tampak mirip WebPart dengan kontrol pada waktu desain dan durasi. Jika Anda memuat halaman di browser, Anda dapat menggunakan UI di halaman untuk menunjukkan kemampuan untuk secara terprogram mengubah nilai properti yang diimplementasikan IWebPart pada durasi. Saat Anda mengubah beberapa nilai properti, perubahan tidak terlihat di halaman, tetapi terlihat di sumber halaman ( TitleIconImageUrl properti ), atau disimpan dalam data status aplikasi ( CatalogIconImageUrl properti ).

Penting

Contoh ini memiliki kotak teks yang menerima input pengguna, yang merupakan potensi ancaman keamanan. Secara default, ASP.NET halaman Web memvalidasi bahwa input pengguna tidak menyertakan elemen skrip atau HTML. Untuk informasi selengkapnya, lihat Gambaran Umum Eksploitasi Skrip.

<%@ 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>

Keterangan

Antarmuka ini IWebPart menyediakan beberapa properti berorientasi UI yang meningkatkan pengalaman pengguna untuk bekerja dengan WebPart kontrol. Saat Anda membuat kontrol yang berasal dari kelas dasar WebPart , Anda mendapatkan implementasi semua properti di IWebPart antarmuka, karena WebPart kelas dasar mengimplementasikan antarmuka ini.

Anda dapat menggunakan kontrol pengguna yang ada, kontrol ASP.NET, atau kontrol server kustom yang tidak mewarisi dari WebPart kelas sebagai bagian dari aplikasi Bagian Web, dan mereka juga dapat menggunakan properti berorientasi UI ini yang dideklarasikan oleh IWebPart antarmuka. Jika Anda menempatkan kontrol server yang WebPartZoneBase ada di zona, pada run time mereka dibungkus dengan GenericWebPart objek . GenericWebPart Karena kelas mewarisi dari WebPart kelas dasar, kelas ini memungkinkan kontrol server yang ada untuk bertindak sebagai kontrol benar WebPart dan menambahkan properti IWebPart antarmuka kepada mereka.

Jika Anda menempatkan kontrol server yang tidak WebPart dikontrol di zona, kontrol tersebut IWebPart dapat menggunakan properti pada durasi, dan Anda juga dapat mendeklarasikan nilai untuk properti tersebut pada kontrol server dalam markup halaman (dalam format persistensi halaman). Namun, karena properti ini hanya tersedia untuk kontrol server pada durasi, fitur pengodean waktu desain seperti IntelliSense tidak mengenali IWebPart properti yang dideklarasikan pada kontrol server. Properti yang dinyatakan pada kontrol ini masih berfungsi saat Anda memuat halaman, tetapi Microsoft Visual Studio tidak mengenali properti sebagai valid pada waktu desain. Jika Anda ingin menambahkan properti ke IWebPart server dan kontrol pengguna yang ada untuk meningkatkan pengalaman pengguna waktu desain, Anda dapat mengimplementasikan IWebPart antarmuka dalam kontrol server.

Mungkin alasan utama untuk mengimplementasikan IWebPart antarmuka adalah untuk kontrol yang tidak mendukung penggunaan properti expando (kustom). Properti Expando adalah string yang dapat ditambahkan ke kelas secara dinamis sebagai properti, melalui IAttributeAccessor antarmuka. Kontrol yang mengimplementasikan antarmuka ini, termasuk kelas dan turunannya WebControl , dapat menggunakan properti expando. Oleh karena itu, semua kontrol server ASP.NET, kontrol kustom yang berasal dari mereka, kontrol pengguna Web, dan WebPart kontrol mendukung penggunaan properti expando. Tetapi kontrol kustom yang mewarisi langsung dari kelas dasar Control tidak mendukung properti expando. Dengan demikian, jika Anda menyatakan kontrol ini dalam WebPartZone, Anda tidak akan dapat mendeklarasikan properti umum IWebPart pada kontrol, properti seperti Title dan Description. Jika Anda ingin menggunakan properti ini dengan kontrol tersebut IWebPart , Anda harus mengimplementasikan antarmuka.

Catatan Bagi Implementer

Biasanya Anda tidak perlu mengimplementasikan IWebPart antarmuka, baik pada kontrol kustom WebPart atau kontrol server, karena kelas dasar WebPart sudah mengimplementasikan antarmuka. Kontrol kustom WebPart , dan kontrol server lain yang ditempatkan di WebPartZoneBase zona, dapat menggunakan semua IWebPart properti.

Alasan utama untuk mengimplementasikan IWebPart antarmuka sendiri, baik dalam kontrol kustom WebPart atau kontrol server lain, adalah jika Anda ingin mengubah implementasi default. Misalnya, Anda mungkin ingin memberikan nilai default untuk beberapa properti. Alasan lain untuk mengimplementasikan antarmuka dalam kontrol pengguna atau server adalah agar pengalaman waktu desain bekerja dengan properti ini pada kontrol akan ditingkatkan.

Properti

CatalogIconImageUrl

Mendapatkan atau mengatur URL ke gambar yang mewakili WebPart kontrol dalam katalog kontrol.

Description

Mendapatkan atau mengatur frasa singkat yang meringkas apa yang dilakukan kontrol, untuk digunakan dalam TipsAlat dan katalog WebPart kontrol.

Subtitle

Mendapatkan string yang digabungkan dengan Title nilai properti untuk membentuk judul lengkap untuk WebPart kontrol.

Title

Mendapatkan atau mengatur judul WebPart kontrol.

TitleIconImageUrl

Mendapatkan atau mengatur URL ke gambar yang digunakan untuk mewakili kontrol Bagian Web di bilah judul kontrol sendiri.

TitleUrl

Mendapatkan atau mengatur URL ke informasi tambahan tentang WebPart kontrol.

Berlaku untuk

Lihat juga