IWebPart Antarmuka
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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 mengubah nilai properti yang diimplementasikan secara terprogram 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, mereka dapat menggunakan IWebPart 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. |