Udostępnij za pośrednictwem


IWebPart Interfejs

Definicja

Definiuje typowe właściwości interfejsu użytkownika używane przez kontrolki ASP.NET WebPart .

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

Przykłady

W poniższym przykładzie kodu pokazano, jak zaimplementować IWebPart interfejs w kontrolce użytkownika. Jest to prosta implementacja, która pokazuje minimalnie sposób implementowania właściwości.

Pierwsza część przykładu kodu przedstawia kontrolkę użytkownika. Kontrolka użytkownika implementuje wszystkie właściwości interfejsu IWebPart oraz dwie dodatkowe właściwości publiczne powiązane z kontrolkami w interfejsie użytkownika. Dwie właściwości niestandardowe używają atrybutu Personalizable , który umożliwia zapisanie wartości w tych właściwościach w sesjach przeglądarki. Należy pamiętać, że w implementacji klasy bazowej WebPart wszystkie właściwości interfejsu IWebPart są implementowane jako personalizowalne, choć nie są one w tym przykładzie kodu.

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

Druga część przykładu kodu przedstawia stronę sieci Web, która hostuje kontrolkę użytkownika. Strona ma kontrolkę WebPartZone , w ramach której odwołuje się kontrolka użytkownika. Zwróć uwagę, że kilka IWebPart wartości właściwości interfejsu jest ustawianych deklaratywnie w znacznikach dla kontrolki użytkownika, co umożliwia jej zachowanie i wygląd podobny do WebPart kontrolki w czasie projektowania i czasie wykonywania. Jeśli załadujesz stronę w przeglądarce, możesz użyć interfejsu użytkownika na stronie, aby zademonstrować możliwość programowego zmieniania wartości zaimplementowanych IWebPart właściwości w czasie wykonywania. Po zmianie niektórych wartości właściwości zmiany nie są widoczne na stronie, ale są widoczne w źródle strony ( TitleIconImageUrl właściwości) lub są przechowywane w danych stanu aplikacji ( CatalogIconImageUrl właściwość).

Ważne

W tym przykładzie znajduje się pole tekstowe, które akceptuje dane wejściowe użytkownika, co jest potencjalnym zagrożeniem bezpieczeństwa. Domyślnie ASP.NET strony sieci Web weryfikują, czy dane wejściowe użytkownika nie zawierają skryptów ani elementów HTML. Aby uzyskać więcej informacji, zobacz Omówienie luk w zabezpieczeniach skryptów.

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

Uwagi

Interfejs IWebPart udostępnia kilka właściwości zorientowanych na interfejs użytkownika, które zwiększają środowisko pracy użytkownika z kontrolkami WebPart . Podczas tworzenia kontrolek pochodzących z klasy bazowej uzyskuje się implementację wszystkich właściwości interfejsuIWebPart, ponieważ WebPart klasa bazowa WebPart implementuje ten interfejs.

Możesz użyć istniejących kontrolek użytkownika, kontrolek ASP.NET lub niestandardowych kontrolek serwera, które nie dziedziczą z WebPart klasy jako części aplikacji składników Web Part, a także mogą używać tych właściwości zorientowanych na interfejs użytkownika zadeklarowanych przez IWebPart interfejs. Jeśli istniejące kontrolki serwera są umieszczane w WebPartZoneBase strefie, w czasie wykonywania są one opakowane obiektem GenericWebPart . GenericWebPart Ponieważ klasa dziedziczy z klasy bazowejWebPart, umożliwia istniejącym kontrolkom serwera działanie jako prawdziwe WebPart kontrolki i dodaje do nich właściwości interfejsuIWebPart.

Jeśli umieszczasz kontrolki serwera, które nie WebPart są kontrolkami w strefach, mogą używać IWebPart właściwości w czasie wykonywania, a także zadeklarować wartości dla tych właściwości w kontrolkach serwera w adiustacji strony (w formacie trwałości strony). Jednak ponieważ te właściwości są dostępne tylko dla kontrolek serwera w czasie wykonywania, funkcje kodowania w czasie projektowania, takie jak IntelliSense, nie rozpoznają IWebPart właściwości zadeklarowanych w kontrolkach serwera. Zadeklarowane właściwości tych kontrolek nadal działają podczas ładowania strony, ale program Microsoft Visual Studio nie rozpoznaje właściwości jako prawidłowych w czasie projektowania. Jeśli chcesz dodać IWebPart właściwości do istniejących kontrolek serwera i użytkownika w celu ulepszenia środowiska użytkownika w czasie projektowania, możesz zaimplementować IWebPart interfejs w kontrolce serwera.

Być może głównym powodem implementacji interfejsu jest kontrolki IWebPart , które nie obsługują użycia właściwości expando (niestandardowych). Właściwości Expando to ciągi, które można dodać do klasy dynamicznie jako właściwość, za pomocą interfejsu IAttributeAccessor . Kontrolki implementujące ten interfejs, w tym klasę WebControl i jej elementy podrzędne, mogą używać właściwości expando. W związku z tym wszystkie kontrolki serwera ASP.NET, kontrolki niestandardowe pochodzące z nich, kontrolki użytkownika sieci Web i WebPart kontrolki obsługują korzystanie z właściwości expando. Jednak kontrolki niestandardowe dziedziczone bezpośrednio z klasy bazowej Control nie obsługują właściwości expando. W związku z tym, jeśli zadeklarujesz te kontrolki w ramach elementu WebPartZone, nie będzie można zadeklarować wspólnych IWebPart właściwości kontrolek, właściwości, takich jak Title i Description. Jeśli chcesz użyć tych właściwości z takimi kontrolkami, musisz zaimplementować IWebPart interfejs.

Uwagi dotyczące implementowania

Zwykle nie trzeba implementować interfejsu IWebPart , zarówno na kontrolkach niestandardowych WebPart , jak i na kontrolkach serwera, ponieważ klasa bazowa WebPart już implementuje interfejs. Kontrolki niestandardowe WebPart i inne kontrolki serwera umieszczone w WebPartZoneBase strefach mogą używać wszystkich IWebPart właściwości.

Głównym powodem samodzielnego zaimplementowania interfejsu IWebPart , zarówno w niestandardowej WebPart kontrolce, jak i innej kontrolce serwera, jest zmiana domyślnej implementacji. Na przykład możesz podać wartości domyślne dla niektórych właściwości. Innym powodem implementacji interfejsu w kontrolce użytkownika lub serwera jest to, że środowisko projektowania pracy z tymi właściwościami w kontrolce zostanie ulepszone.

Właściwości

CatalogIconImageUrl

Pobiera lub ustawia adres URL na obraz, który reprezentuje kontrolkę WebPart w katalogu kontrolek.

Description

Pobiera lub ustawia krótką frazę, która podsumowuje działanie kontrolki do użycia w etykietkach narzędzi i katalogach WebPart kontrolek.

Subtitle

Pobiera ciąg połączony z wartością Title właściwości, aby utworzyć pełny tytuł kontrolki WebPart .

Title

Pobiera lub ustawia tytuł kontrolki WebPart .

TitleIconImageUrl

Pobiera lub ustawia adres URL obrazu używanego do reprezentowania kontrolki składników Web Part na pasku tytułu kontrolki.

TitleUrl

Pobiera lub ustawia adres URL na dodatkowe informacje o kontrolce WebPart .

Dotyczy

Zobacz też