Freigeben über


IWebPart Schnittstelle

Definition

Definiert allgemeine Benutzeroberflächeneigenschaften, die von ASP.NET-WebPart-Steuerelementen verwendet werden.

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

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie die IWebPart Schnittstelle in einem Benutzersteuerelement implementiert wird. Dies ist eine einfache Implementierung, die nur minimal zeigt, wie die Eigenschaften implementiert werden.

Der erste Teil des Codebeispiels zeigt das Benutzersteuerelement. Das Benutzersteuerelement implementiert alle Eigenschaften der IWebPart Schnittstelle sowie zwei zusätzliche öffentliche Eigenschaften, die an Steuerelemente in der Benutzeroberfläche gebunden sind. Die beiden benutzerdefinierten Eigenschaften verwenden jeweils das Personalizable -Attribut, mit dem die Werte in diesen Eigenschaften über Browsersitzungen hinweg gespeichert werden können. Beachten Sie, dass in der Basisklassenimplementierung WebPart alle Eigenschaften der IWebPart Schnittstelle auch als personalisierbar implementiert werden, obwohl sie sich nicht in diesem Codebeispiel befinden.

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

Der zweite Teil des Codebeispiels zeigt die Webseite, die das Benutzersteuerelement hostet. Die Seite verfügt über ein WebPartZone Steuerelement, in dem auf das Benutzersteuerelement verwiesen wird. Beachten Sie, dass einige der Eigenschaftenwerte der IWebPart Schnittstelle im Markup für das Benutzersteuerelement deklarativ festgelegt werden, sodass es sich sowohl verhalten als auch einem WebPart Steuerelement zur Entwurfs- und Laufzeit ähnelt. Wenn Sie die Seite in einem Browser laden, können Sie die Benutzeroberfläche auf der Seite verwenden, um zu veranschaulichen, dass die Werte der implementierten IWebPart Eigenschaften zur Laufzeit programmgesteuert geändert werden können. Wenn Sie einige der Eigenschaftswerte ändern, sind die Änderungen nicht auf der Seite sichtbar, sondern in der Seitenquelle (der TitleIconImageUrl -Eigenschaft) sichtbar oder werden in den Zustandsdaten der Anwendung (die CatalogIconImageUrl -Eigenschaft) gespeichert.

Wichtig

Dieses Beispiel umfasst ein Textfeld, das Benutzereingaben akzeptiert, die ein potenzielles Sicherheitsrisiko darstellen. Standardmäßig stellen ASP.NET-Webseiten sicher, dass Benutzereingaben keine Skript- oder HTML-Elemente enthalten. Weitere Informationen finden Sie unter Übersicht über Skriptangriffe.

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

Hinweise

Die IWebPart Schnittstelle bietet mehrere ui-orientierte Eigenschaften, die die Benutzerfreundlichkeit der Arbeit mit WebPart Steuerelementen verbessern. Wenn Sie Steuerelemente erstellen, die von der Basisklasse WebPart abgeleitet werden, erhalten Sie eine Implementierung aller Eigenschaften in der IWebPart Schnittstelle, da die WebPart Basisklasse diese Schnittstelle implementiert.

Sie können vorhandene Benutzersteuerelemente, ASP.NET-Steuerelemente oder benutzerdefinierte Serversteuerelemente verwenden, die nicht von der WebPart Klasse als Teil einer Webpartanwendung erben, und sie können auch diese benutzeroberflächenorientierten Eigenschaften verwenden, die von der IWebPart Schnittstelle deklariert wurden. Wenn Sie vorhandene Serversteuerelemente in einer WebPartZoneBase Zone platzieren, werden sie zur Laufzeit mit einem GenericWebPart -Objekt umschlossen. Da die GenericWebPart -Klasse von der WebPart Basisklasse erbt, können vorhandene Serversteuerelemente als echte WebPart Steuerelemente fungieren und ihnen die Eigenschaften der IWebPart Schnittstelle hinzufügen.

Wenn Sie Serversteuerelemente, die keine WebPart Steuerelemente sind, in Zonen platzieren, können sie die IWebPart Eigenschaften zur Laufzeit verwenden, und Sie können auch Werte für diese Eigenschaften für Serversteuerelemente im Markup der Seite deklarieren (im Seitenpersistenzformat). Da diese Eigenschaften jedoch nur zur Laufzeit für die Serversteuerelemente verfügbar sind, erkennen IWebPart Entwurfszeitcodierungsfeatures wie IntelliSense keine Eigenschaften, die für Serversteuerelemente deklariert sind. Deklarierte Eigenschaften für diese Steuerelemente funktionieren weiterhin, wenn Sie die Seite laden, aber Microsoft Visual Studio erkennt die Eigenschaften zur Entwurfszeit nicht als gültig an. Wenn Sie die IWebPart Eigenschaften vorhandenen Server- und Benutzersteuerelementen hinzufügen möchten, um die Benutzererfahrung während der Entwurfszeit zu verbessern, können Sie die IWebPart Schnittstelle in einem Serversteuerelement implementieren.

Möglicherweise liegt der Hauptgrund für die Implementierung der IWebPart Schnittstelle in Steuerelementen, die die Verwendung von expando (benutzerdefinierten) Eigenschaften nicht unterstützen. Expando-Eigenschaften sind Zeichenfolgen, die einer Klasse dynamisch als Eigenschaft mithilfe der IAttributeAccessor -Schnittstelle hinzugefügt werden können. Steuerelemente, die diese Schnittstelle implementieren, einschließlich der WebControl Klasse und ihrer untergeordneten Elemente, können expando-Eigenschaften verwenden. Daher unterstützen alle ASP.NET Serversteuerelemente, von ihnen abgeleitete benutzerdefinierte Steuerelemente, Webbenutzersteuerelemente und WebPart Steuerelemente die Verwendung von expando-Eigenschaften. Benutzerdefinierte Steuerelemente, die direkt von der Basisklasse Control erben, unterstützen jedoch keine Expando-Eigenschaften. Wenn Sie also diese Steuerelemente in einem WebPartZonedeklarieren, können Sie die allgemeinen IWebPart Eigenschaften für die Steuerelemente nicht deklarieren, z Title . B. und Description. Wenn Sie diese Eigenschaften mit solchen Steuerelementen verwenden möchten, müssen Sie die IWebPart Schnittstelle implementieren.

Hinweise für Ausführende

Normalerweise müssen Sie die IWebPart Schnittstelle nicht implementieren, weder für benutzerdefinierte WebPart Steuerelemente noch für Serversteuerelemente, da die Basisklasse WebPart die Schnittstelle bereits implementiert. Benutzerdefinierte WebPart Steuerelemente und andere Serversteuerelemente, die in WebPartZoneBase Zonen platziert werden, können alle IWebPart Eigenschaften verwenden.

Der Hauptgrund, die IWebPart Schnittstelle selbst zu implementieren, sei es in einem benutzerdefinierten WebPart Steuerelement oder einem anderen Serversteuerelement, ist, wenn Sie die Standardimplementierung ändern möchten. Sie können beispielsweise Standardwerte für einige der Eigenschaften angeben. Ein weiterer Grund für die Implementierung der Schnittstelle in einem Benutzer- oder Serversteuerelement ist, dass die Entwurfszeiterfahrung beim Arbeiten mit diesen Eigenschaften für das Steuerelement verbessert wird.

Eigenschaften

CatalogIconImageUrl

Ruft die URL eines Bildes ab, mit dem ein WebPart-Steuerelement in einem Katalog von Steuerelementen dargestellt wird, oder legt diese fest.

Description

Ruft einen kurzen Ausdruck ab, der die Funktion des Steuerelements zusammenfasst und in QuickInfos und Katalogen von WebPart-Steuerelementen verwendet wird, oder legt diesen fest.

Subtitle

Ruft eine Zeichenfolge ab, die mit dem Wert der Title-Eigenschaft verkettet wird, um einen vollständigen Titel für ein WebPart-Steuerelement zu bilden.

Title

Ruft den Titel eines WebPart-Steuerelements ab oder legt diesen fest.

TitleIconImageUrl

Ruft die URL eines Bilds ab, mit dem ein Webparts-Steuerelement auf dessen eigener Titelleiste dargestellt wird, oder legt diese fest.

TitleUrl

Ruft eine URL zu ergänzenden Informationen über ein WebPart-Steuerelement ab oder legt diese fest.

Gilt für:

Weitere Informationen