IWebPart Rozhraní

Definice

Definuje běžné vlastnosti uživatelského rozhraní používané ovládacími prvky ASP.NETWebPart.

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á ukazuje minimální způsob implementace vlastností.

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 vázané na ovládací prvky v uživatelském rozhraní. Tyto dvě vlastní vlastnosti používají Personalizable atribut, který umožňuje ukládání hodnot 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í implementovány jako personalizovatelné, 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, na který odkazuje uživatelský ovládací prvek. Všimněte si, že několik IWebPart hodnot vlastností rozhraní je deklarativní ve značkách uživatelského ovládacího prvku, což umožňuje chovat se a vypadat podobně jako WebPart ovládací prvek v době návrhu a běhu. Pokud stránku načtete v prohlížeči, můžete pomocí uživatelského rozhraní na stránce předvést možnost programově změnit hodnoty implementovaných IWebPart vlastností za běhu. Když změníte některé hodnoty vlastnosti, změny nejsou na stránce zřejmé, ale jsou viditelné ve zdroji stránky ( TitleIconImageUrl vlastnost) nebo jsou uloženy ve stavových datech 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ých stránek ověřte, že vstup uživatele neobsahuje skript ani prvky 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í práce s ovládacími WebPart prvky. Při vytváření ovládacích prvků odvozených 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é části a mohou také používat tyto vlastnosti orientované na uživatelské rozhraní deklarované rozhranímIWebPart. Pokud umístíte existující ovládací prvky serveru do WebPartZoneBase zóny, za běhu jsou zabaleny objektem GenericWebPart . Vzhledem k tomu, že GenericWebPart třída dědí ze WebPart základní třídy, umožňuje stávající serverové ovládací prvky fungovat jako skutečné WebPart ovládací prvky a přidá je do nich vlastnosti IWebPart rozhraní.

Pokud umístíte ovládací prvky serveru, které nejsou WebPart ovládacími prvky v zónách, můžou používat IWebPart vlastnosti za běhu a můžete také deklarovat hodnoty těchto vlastností na ovládacích prvcích serveru 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 deklarované na ovládacích prvcích serveru. Deklarované vlastnosti těchto ovládacích prvků stále fungují při načítání stránky, ale Microsoft Visual Studio nerozpozná vlastnosti jako platné v době návrhu. Pokud chcete přidat IWebPart vlastnosti do existujících ovládacích prvků serveru a uživatelů, abyste vylepšili uživatelské prostředí v době návrhu, můžete rozhraní implementovat IWebPart do ovládacího prvku serveru.

Možná hlavní důvod implementace IWebPart rozhraní je pro 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 prostřednictvím 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 ovládací prvky serveru ASP.NET, vlastní ovládací prvky odvozené z nich, ovládací prvky webového uživatele a WebPart ovládací prvky podporují použití vlastností rozbalení. 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 , WebPartZonenebudete moci 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 rozhraní implementovat IWebPart .

Poznámky pro implementátory

Obvykle není nutné implementovat IWebPart rozhraní, a to buď na 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ší ovládací prvky serveru umístěné v WebPartZoneBase zónách můžou používat všechny IWebPart vlastnosti.

Hlavním důvodem k implementaci IWebPart rozhraní sami, ať už ve vlastním WebPart ovládacím prvku nebo jiném ovládacím prvku serveru, je, jestli chcete změnit výchozí implementaci. Můžete například chtít zadat výchozí hodnoty pro některé vlastnosti. Dalším důvodem k implementaci rozhraní v ovládacím prvku uživatele nebo serveru je, aby se zlepšilo prostředí návrhu práce s těmito vlastnostmi na ovládacím prvku.

Vlastnosti

CatalogIconImageUrl

Získá nebo nastaví adresu URL na obrázek, který představuje WebPart ovládací prvek 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 WebPart ovládacího prvku.

Title

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

TitleIconImageUrl

Získá nebo nastaví adresu URL obrázku použitého k reprezentaci ovládacího prvku Webové části na vlastním záhlaví ovládacího prvku.

TitleUrl

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

Platí pro

Viz také