Sdílet prostřednictvím


IWebPart Rozhraní

Definice

Definuje společné vlastnosti uživatelského rozhraní používané ovládacími prvky ASP.NET WebPart .

public interface class IWebPart
public interface IWebPart
type IWebPart = interface
Public Interface IWebPart
Odvozené

Příklady

Následující příklad kódu ukazuje, jak implementovat IWebPart rozhraní v uživatelském ovládacím prvku. Jedná se o jednoduchou implementaci, která minimálně ukazuje, jak implementovat vlastnosti.

První část příkladu kódu ukazuje uživatelský ovládací prvek. Uživatelský ovládací prvek implementuje všechny vlastnosti IWebPart rozhraní a dvě další veřejné vlastnosti spojené s ovládacími prvky v uživatelském rozhraní. Každá z těchto dvou vlastních vlastností používá Personalizable atribut, který umožňuje ukládat hodnoty v těchto vlastnostech napříč relacemi prohlížeče. Všimněte si, že v implementaci základní WebPart třídy jsou všechny vlastnosti IWebPart rozhraní také implementovány jako přizpůsobitelné, i když nejsou v tomto příkladu kódu.

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

Druhá část příkladu kódu ukazuje webovou stránku, která je hostitelem uživatelského ovládacího prvku. Stránka obsahuje WebPartZone ovládací prvek, ve kterém se odkazuje na uživatelský ovládací prvek. Všimněte si, že několik IWebPart hodnot vlastností rozhraní je nastaveno deklarativně ve značkách pro uživatelský ovládací prvek, což umožňuje, aby se chovat a vypadat podobně jako ovládací prvek v době návrhu WebPart a v době běhu. Pokud stránku načtete v prohlížeči, můžete pomocí uživatelského rozhraní na stránce demonstrovat schopnost programově měnit hodnoty implementovaných IWebPart vlastností za běhu. Když změníte některé hodnoty vlastností, změny nejsou patrné na stránce, ale jsou viditelné ve zdroji stránky ( TitleIconImageUrl vlastnost) nebo jsou uloženy v datech stavu aplikace ( CatalogIconImageUrl vlastnost).

Důležité

Tento příklad obsahuje textové pole, které přijímá vstup uživatele, což je potenciální bezpečnostní hrozba. Ve výchozím nastavení ASP.NET webové stránky ověřují, že uživatelský vstup neobsahuje skript nebo elementy HTML. Další informace najdete v tématu Přehled zneužití skriptů.

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

Poznámky

Rozhraní IWebPart poskytuje několik vlastností orientovaných na uživatelské rozhraní, které zlepšují uživatelské prostředí při práci s ovládacími WebPart prvky. Při vytváření ovládacích prvků, které jsou odvozeny ze základní WebPart třídy, získáte implementaci všech vlastností v IWebPart rozhraní, protože WebPart základní třída implementuje toto rozhraní.

Můžete použít existující uživatelské ovládací prvky, ASP.NET ovládací prvky nebo vlastní serverové ovládací prvky, které nedědí z WebPart třídy jako součást aplikace webových částí, a mohou také použít tyto vlastnosti orientované na uživatelské rozhraní deklarované rozhraním IWebPart . Pokud umístíte existující serverové WebPartZoneBase ovládací prvky do zóny, jsou za běhu zabalené s objektem GenericWebPart . Vzhledem k tomu, že GenericWebPart třída dědí ze WebPart základní třídy, umožňuje existující serverové ovládací prvky fungovat jako skutečné WebPart ovládací prvky a přidává do nich vlastnosti IWebPart rozhraní.

Pokud umístíte serverové ovládací prvky, které nejsou WebPart ovládacími prvky, do zón, můžou používat IWebPart vlastnosti za běhu a můžete také deklarovat hodnoty těchto vlastností na serverových ovládacích prvcích ve značkách stránky (ve formátu trvalosti stránky). Vzhledem k tomu, že tyto vlastnosti jsou k dispozici pouze ovládacím prvkům serveru za běhu, funkce kódování v době návrhu, jako je IntelliSense, nerozpoznávají IWebPart vlastnosti, které jsou deklarovány na serverových ovládacích prvcích. Deklarované vlastnosti u těchto ovládacích prvků stále fungují i při načtení stránky, ale microsoft Visual Studio nerozpozná vlastnosti jako platné v době návrhu. Pokud chcete přidat IWebPart vlastnosti do existujících serverových a uživatelských ovládacích prvků, abyste vylepšili uživatelské prostředí v době návrhu IWebPart , můžete rozhraní implementovat v ovládacím prvku serveru.

Možná je hlavním důvodem pro implementaci IWebPart rozhraní ovládací prvky, které nepodporují použití expando (vlastních) vlastností. Expando vlastnosti jsou řetězce, které lze přidat do třídy dynamicky jako vlastnost pomocí IAttributeAccessor rozhraní. Ovládací prvky, které implementují toto rozhraní, včetně WebControl třídy a jejích podřízených položek, mohou používat vlastnosti expando. Proto všechny ASP.NET serverové ovládací prvky, vlastní ovládací prvky, které z nich jsou odvozeny, webové uživatelské ovládací prvky a WebPart ovládací prvky podporují použití vlastností expando. Vlastní ovládací prvky, které dědí přímo ze základní Control třídy, ale nepodporují vlastnosti expando. Pokud tedy tyto ovládací prvky deklarujete v rámci WebPartZone, nebudete moct deklarovat společné IWebPart vlastnosti ovládacích prvků, například Title a Description. Pokud chcete tyto vlastnosti použít s těmito ovládacími prvky, musíte implementovat IWebPart rozhraní.

Poznámky pro implementátory

Za normálních okolností není nutné implementovat IWebPart rozhraní, a to buď ve vlastních WebPart ovládacích prvcích nebo serverových ovládacích prvcích, protože základní WebPart třída již implementuje rozhraní. Vlastní WebPart ovládací prvky a další serverové ovládací prvky umístěné v WebPartZoneBase zónách můžou používat všechny IWebPart vlastnosti.

Hlavním důvodem, proč implementovat IWebPart rozhraní sami, ať už ve vlastním WebPart ovládacím prvku nebo jiném ovládacím prvku serveru, je, pokud chcete změnit výchozí implementaci. Můžete například chtít zadat výchozí hodnoty pro některé vlastnosti. Dalším důvodem pro implementaci rozhraní v uživatelském nebo serverovém ovládacím prvku je, aby se zlepšila doba návrhu práce s těmito vlastnostmi ovládacího prvku.

Vlastnosti

CatalogIconImageUrl

Získá nebo nastaví adresu URL na obrázek, který představuje ovládací prvek WebPart v katalogu ovládacích prvků.

Description

Získá nebo nastaví stručnou frázi, která shrnuje, co ovládací prvek dělá, pro použití v popisech a katalogech ovládacích WebPart prvků.

Subtitle

Získá řetězec, který je zřetězen s Title hodnotou vlastnosti vytvořit úplný název ovládacího prvku WebPart .

Title

Získá nebo nastaví název ovládacího prvku WebPart .

TitleIconImageUrl

Získá nebo nastaví adresu URL na obrázek, který se používá k reprezentaci webové části ovládací prvek v záhlaví vlastního ovládacího prvku.

TitleUrl

Získá nebo nastaví adresu URL na doplňující informace o ovládacím WebPart prvku.

Platí pro

Viz také