Share via


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 minimal zeigt, wie die Eigenschaften implementiert werden.

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

<%@ 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, auf der das Benutzersteuerelement gehostet wird. Die Seite verfügt über ein WebPartZone Steuerelement, in dem das Benutzersteuerelement referenziert wird. Beachten Sie, dass mehrere Eigenschaftenwerte der IWebPart Schnittstelle deklarativ im Markup für das Benutzersteuerelement festgelegt werden, was es ermöglicht, sich sowohl verhalten als auch ähnlich wie ein WebPart Steuerelement zur Entwurfszeit und Laufzeit anzuzeigen. Wenn Sie die Seite in einem Browser laden, können Sie die Benutzeroberfläche auf der Seite verwenden, um die Möglichkeit zu veranschaulichen, die Werte der implementierten IWebPart Eigenschaften zur Laufzeit programmgesteuert zu ändern. Wenn Sie einige der Eigenschaftenwerte ändern, werden die Änderungen auf der Seite nicht offensichtlich, sind aber in der Seitenquelle (eigenschaft) sichtbar oder werden in den Statusdaten der Anwendung ( TitleIconImageUrl CatalogIconImageUrl die 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 abgeleitet werden, erhalten Sie eine Implementierung aller Eigenschaften in der IWebPart Schnittstelle, da die WebPart Basisklasse WebPart diese Schnittstelle implementiert.

Sie können vorhandene Benutzersteuerelemente, ASP.NET Steuerelemente oder benutzerdefinierte Serversteuerelemente verwenden, die nicht aus der Klasse als Teil einer Webparts-Anwendung erben, und sie können diese benutzeroberflächeorientierten Eigenschaften auch verwenden, die von der WebPart IWebPart Schnittstelle deklariert wurden. Wenn Sie vorhandene Serversteuerelemente in einer Zone platzieren, werden sie zur Laufzeit mit einem WebPartZoneBase GenericWebPart Objekt umgebrochen. Da die GenericWebPart Klasse von der WebPart Basisklasse erbt, ermöglicht es vorhandenen Serversteuerelementen, als wahre WebPart Steuerelemente zu handeln und sie den Eigenschaften der IWebPart Schnittstelle hinzufügt.

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

Vielleicht ist der Hauptgrund zum Implementieren der IWebPart Schnittstelle für Steuerelemente, die die Verwendung von expando -Eigenschaften (benutzerdefinierte) nicht unterstützen. Expando-Eigenschaften sind Zeichenfolgen, die einer Klasse dynamisch als Eigenschaft hinzugefügt werden können, mithilfe der IAttributeAccessor Schnittstelle. 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, benutzerdefinierte Steuerelemente, die von ihnen abgeleitet werden, Webbenutzersteuerelemente und WebPart Steuerelemente die Verwendung von expando-Eigenschaften. Benutzerdefinierte Steuerelemente, die direkt von der Basisklasse Control erben, unterstützen jedoch keine Erweiterungseigenschaften. Wenn Sie also diese Steuerelemente innerhalb einer WebPartZoneDeklarieren, können Sie die allgemeinen IWebPart Eigenschaften der Steuerelemente, wie 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 Schnittstelle nicht implementieren, entweder auf benutzerdefinierten WebPart Steuerelementen oder Serversteuerelementen, da die Basisklasse WebPart bereits die IWebPart Schnittstelle implementiert. Benutzerdefinierte WebPart Steuerelemente und andere Serversteuerelemente, die in WebPartZoneBase Zonen platziert werden, können alle IWebPart Eigenschaften verwenden.

Der Hauptgrund für die Implementierung der Schnittstelle selbst, egal ob in einem benutzerdefinierten WebPart Steuerelement oder einem anderen Serversteuerelement, ist, wenn Sie die IWebPart Standardimplementierung ändern möchten. Sie können beispielsweise Standardwerte für einige der Eigenschaften bereitstellen. Ein weiterer Grund zum Implementieren der Schnittstelle in einem Benutzer- oder Serversteuerelement besteht darin, dass die Entwurfszeit der Arbeit mit diesen Eigenschaften auf dem 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

Siehe auch