IWebPart Arabirim
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
ASP.NET WebPart denetimleri tarafından kullanılan ortak kullanıcı arabirimi (UI) özelliklerini tanımlar.
public interface class IWebPart
public interface IWebPart
type IWebPart = interface
Public Interface IWebPart
- Türetilmiş
Örnekler
Aşağıdaki kod örneği, arabirimin kullanıcı denetiminde IWebPart nasıl uygulanduğunu gösterir. Bu, özelliklerin nasıl uygulandığını minimum düzeyde gösteren basit bir uygulamadır.
Kod örneğinin ilk bölümünde kullanıcı denetimi gösterilir. Kullanıcı denetimi, arabirimin tüm özelliklerini ve kullanıcı arabirimindeki IWebPart denetimlere bağlı iki ek genel özelliği uygular. İki özel özelliğin Personalizable
her birinde, bu özelliklerdeki değerlerin tarayıcı oturumlarında kaydedilmesini sağlayan özniteliği kullanılır. Temel WebPart sınıf uygulamasında arabirimin tüm özelliklerinin de kişiselleştirilebilir olarak uygulandığını IWebPart , ancak bu kod örneğinde yer almadığını unutmayın.
<%@ 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>
Kod örneğinin ikinci bölümünde kullanıcı denetimini barındıran Web sayfası gösterilir. Sayfada kullanıcı denetimine başvurulan bir WebPartZone denetim vardır. Arabirimin IWebPart özellik değerlerinin birkaçının kullanıcı denetimi için işaretlemede bildirim temelli olarak ayarlandığına dikkat edin. Bu da hem tasarım zamanında hem de çalışma zamanında bir WebPart denetime benzer şekilde davranmasına ve görünmesine olanak tanır. Sayfayı bir tarayıcıda yüklerseniz, çalışma zamanında uygulanan IWebPart özelliklerin değerlerini program aracılığıyla değiştirme özelliğini göstermek için sayfadaki kullanıcı arabirimini kullanabilirsiniz. Özellik değerlerinden bazılarını değiştirdiğinizde, değişiklikler sayfada belirgin olmaz, ancak sayfa kaynağında ( TitleIconImageUrl özellik) görünür veya uygulamanın durum verilerinde ( CatalogIconImageUrl özellik) depolanır.
Önemli
Bu örnekte, olası bir güvenlik tehdidi olan kullanıcı girişini kabul eden bir metin kutusu vardır. Varsayılan olarak, ASP.NET Web sayfaları kullanıcı girişinin betik veya HTML öğeleri içermediğini doğrular. Daha fazla bilgi için bkz. Betik Açıklarına Genel Bakış.
<%@ 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>
Açıklamalar
Arabirim, IWebPart denetimlerle WebPart çalışma kullanıcı deneyimini geliştiren birkaç kullanıcı arabirimi odaklı özellik sağlar. Temel sınıftan türetilen denetimler oluşturduğunuzda, temel WebPart sınıf bu arabirimi uyguladığından arabirimdeki IWebPart tüm özelliklerin WebPart bir uygulamasını alırsınız.
Var olan kullanıcı denetimlerini, ASP.NET denetimlerini veya bir Web Bölümleri uygulamasının parçası olarak sınıfından devralmayan WebPart özel sunucu denetimlerini kullanabilirsiniz ve arabirim tarafından IWebPart bildirilen bu kullanıcı arabirimi odaklı özellikleri de kullanabilirler. Var olan sunucu denetimlerini bir WebPartZoneBase bölgeye yerleştirirseniz, çalışma zamanında bunlar bir GenericWebPart nesneyle sarmalanmış olur. GenericWebPart sınıfı temel sınıftan WebPart devraldığından, var olan sunucu denetimlerinin gerçek WebPart denetimler olarak davranmasını sağlar ve arabiriminin IWebPart özelliklerini ekler.
Bölgelere denetim olmayan WebPart sunucu denetimleri yerleştirirseniz, bunlar çalışma zamanında özellikleri kullanabilir IWebPart ve ayrıca sayfa işaretlemesinde (sayfa kalıcılık biçiminde) sunucu denetimlerinde bu özelliklerin değerlerini bildirebilirsiniz. Ancak, bu özellikler yalnızca çalışma zamanında sunucu denetimleri tarafından kullanılabildiğinden, IntelliSense gibi tasarım zamanı kodlama özellikleri sunucu denetimlerinde bildirilen özellikleri tanımaz IWebPart . Sayfayı yüklediğinizde bu denetimlerde bildirilen özellikler çalışmaya devam eder, ancak Microsoft Visual Studio özellikleri tasarım zamanında geçerli olarak tanımaz. Tasarım zamanı kullanıcı deneyimini geliştirmek için özellikleri mevcut sunucuya ve kullanıcı denetimlerine eklemek IWebPart istiyorsanız, arabirimi bir sunucu denetiminde uygulayabilirsiniz IWebPart .
Arabirimi uygulamanın IWebPart ana nedeni, expando (özel) özelliklerinin kullanımını desteklemeyen denetimlerdir. Expando özellikleri, arabirim aracılığıyla bir sınıfa dinamik olarak özellik olarak eklenebilen IAttributeAccessor dizelerdir. sınıfı ve alt öğeleri de dahil olmak üzere WebControl bu arabirimi uygulayan denetimler expando özelliklerini kullanabilir. Bu nedenle, tüm ASP.NET sunucu denetimleri, bunlardan türetilen özel denetimler, Web kullanıcı denetimleri ve WebPart denetimleri expando özelliklerinin kullanımını destekler. Ancak doğrudan temel Control sınıftan devralan özel denetimler expando özelliklerini desteklemez. Bu nedenle, içinde bu denetimleri WebPartZonebildirirseniz, ve gibi TitleDescriptiondenetimler, özellikler üzerinde ortak IWebPart özellikleri bildiremezsiniz. Bu özellikleri bu tür denetimlerle kullanmak istiyorsanız arabirimini IWebPart uygulamanız gerekir.
Uygulayanlara Notlar
Normalde, temel WebPart sınıf arabirimi zaten uyguladığından IWebPart arabirimini özel WebPart denetimlerde veya sunucu denetimlerinde uygulamanız gerekmez. Özel WebPart denetimler ve bölgelere WebPartZoneBase yerleştirilen diğer sunucu denetimleri tüm IWebPart özellikleri kullanabilir.
Arabirimi özel denetimde veya başka bir WebPart sunucu denetiminde kendiniz uygulamanın IWebPart temel nedeni, varsayılan uygulamayı değiştirmek istemenizdir. Örneğin, bazı özellikler için varsayılan değerler sağlamak isteyebilirsiniz. Arabirimi bir kullanıcı veya sunucu denetiminde uygulamanın bir diğer nedeni de denetimde bu özelliklerle çalışmanın tasarım zamanı deneyiminin geliştirilmesidir.
Özellikler
CatalogIconImageUrl |
Denetim kataloğundaki bir denetimi temsil eden görüntünün WebPart URL'sini alır veya ayarlar. |
Description |
Araç İpuçlarında ve denetim kataloglarında kullanmak üzere bir denetimin WebPart ne yaptığını özetleyen kısa bir tümcecik alır veya ayarlar. |
Subtitle |
Denetim için tam bir başlık oluşturmak üzere özellik değeriyle Title birleştirilmiş bir WebPart dize alır. |
Title |
Denetimin başlığını WebPart alır veya ayarlar. |
TitleIconImageUrl |
Denetimin kendi başlık çubuğunda web bölümleri denetimini temsil etmek için kullanılan görüntünün URL'sini alır veya ayarlar. |
TitleUrl |
Denetimle ilgili WebPart ek bilgiler için bir URL alır veya ayarlar. |