IWebPart Interface

Definitie

Definieert algemene eigenschappen van de gebruikersinterface (UI) die worden gebruikt door ASP.NET WebPart-besturingselementen.

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

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u de IWebPart interface in een gebruikersbeheer implementeert. Dit is een eenvoudige implementatie die laat zien hoe u de eigenschappen minimaal implementeert.

In het eerste deel van het codevoorbeeld ziet u het gebruikersbeheer. Het gebruikersbesturingselement implementeert alle eigenschappen van de IWebPart interface, plus twee extra openbare eigenschappen die zijn gekoppeld aan besturingselementen in de gebruikersinterface. De twee aangepaste eigenschappen gebruiken elk het Personalizable kenmerk, waardoor de waarden in deze eigenschappen kunnen worden opgeslagen in browsersessies. Houd er rekening mee dat in de implementatie van de basisklasse WebPart ook alle eigenschappen van de IWebPart interface als persoonlijk kunnen worden geïmplementeerd, hoewel ze zich niet in dit codevoorbeeld bevinden.

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

In het tweede deel van het codevoorbeeld ziet u de webpagina waarop het gebruikersbeheer wordt gehost. De pagina heeft een WebPartZone besturingselement waarin naar het gebruikersbeheer wordt verwezen. U ziet dat verschillende eigenschapswaarden van de IWebPart interface declaratief worden ingesteld in de markeringen voor het gebruikersbesturingselement, waardoor het zich zowel gedraagt als lijkt op een WebPart besturingselement tijdens het ontwerp en de uitvoeringstijd. Als u de pagina in een browser laadt, kunt u de gebruikersinterface op de pagina gebruiken om de mogelijkheid te demonstreren om de waarden van de geïmplementeerde IWebPart eigenschappen tijdens runtime programmatisch te wijzigen. Wanneer u enkele eigenschapswaarden wijzigt, zijn de wijzigingen niet zichtbaar op de pagina, maar zichtbaar in de paginabron (de TitleIconImageUrl eigenschap) of worden ze opgeslagen in de statusgegevens van de toepassing (de CatalogIconImageUrl eigenschap).

Important

Dit voorbeeld heeft een tekstvak dat gebruikersinvoer accepteert. Dit is een mogelijke beveiligingsrisico. Standaard valideren ASP.NET webpagina's dat gebruikersinvoer geen script- of HTML-elementen bevat. Zie Overzicht van Script Exploits voor meer informatie.

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

Opmerkingen

De IWebPart interface biedt verschillende gebruikersinterfacegeoriënteerde eigenschappen die de gebruikerservaring van het werken met WebPart besturingselementen verbeteren. Wanneer u besturingselementen maakt die zijn afgeleid van de basisklasse WebPart , krijgt u een implementatie van alle eigenschappen in de IWebPart interface, omdat deze interface door de WebPart basisklasse wordt geïmplementeerd.

U kunt bestaande gebruikersbesturingselementen, ASP.NET besturingselementen of aangepaste serverbesturingselementen gebruiken die niet overnemen van de klasse WebPart als onderdeel van een webonderdelentoepassing, en ze kunnen ook gebruikmaken van deze gebruikersinterfacegeoriënteerde eigenschappen die zijn gedeclareerd door de IWebPart-interface. Als u bestaande serverbesturingselementen in een WebPartZoneBase zone plaatst, worden deze tijdens runtime verpakt met een GenericWebPart object. Omdat de GenericWebPart klasse wordt overgenomen van de WebPart basisklasse, kunnen bestaande serverbesturingselementen fungeren als echte WebPart besturingselementen en worden hieraan de eigenschappen van de IWebPart interface toegevoegd.

Als u serverbesturingselementen plaatst die geen WebPart besturingselementen in zones zijn, kunnen ze de IWebPart eigenschappen tijdens runtime gebruiken en kunt u ook waarden declareren voor deze eigenschappen op serverbesturingselementen in de opmaak van de pagina (in de indeling voor paginapersistentie). Omdat deze eigenschappen echter alleen beschikbaar zijn voor de besturingselementen van de server tijdens runtime, herkent IWebPart ontwerp-tijdcoderingsfuncties zoals IntelliSense geen eigenschappen die zijn gedeclareerd op serverbesturingselementen. Gedeclareerde eigenschappen op deze besturingselementen werken nog steeds wanneer u de pagina laadt, maar Microsoft Visual Studio de eigenschappen niet herkent als geldig tijdens het ontwerp. Als u de IWebPart eigenschappen wilt toevoegen aan bestaande server- en gebruikersbesturingselementen om de ontwerp-gebruikerservaring te verbeteren, kunt u de IWebPart interface in een serverbesturingselement implementeren.

Misschien is de belangrijkste reden om de IWebPart interface te implementeren voor besturingselementen die het gebruik van expando-eigenschappen (aangepast) niet ondersteunen. Expando-eigenschappen zijn tekenreeksen die dynamisch als eigenschap aan een klasse kunnen worden toegevoegd door middel van de IAttributeAccessor interface. Besturingselementen die deze interface implementeren, met inbegrip van de WebControl klasse en de onderliggende elementen, kunnen expando-eigenschappen gebruiken. Daarom ondersteunen alle ASP.NET serverbesturingselementen, aangepaste besturingselementen die hiervan zijn afgeleid, webgebruikersbesturingselementen en WebPart besturingselementen het gebruik van expando-eigenschappen. Aangepaste besturingselementen die rechtstreeks van de basisklasse Control overnemen, bieden echter geen ondersteuning voor expando-eigenschappen. Dus als u deze besturingselementen binnen een WebPartZonedeclareert, kunt u de gemeenschappelijke IWebPart eigenschappen van de besturingselementen, eigenschappen zoals Title en Description. Als u deze eigenschappen met dergelijke besturingselementen wilt gebruiken, moet u de IWebPart interface implementeren.

Notities voor uitvoerders

Normaal gesproken hoeft u de IWebPart interface niet te implementeren, hetzij op aangepaste WebPart besturingselementen of serverbesturingselementen, omdat de basisklasse WebPart de interface al implementeert. Aangepaste WebPart besturingselementen en andere serverbesturingselementen die in WebPartZoneBase zones worden geplaatst, kunnen alle IWebPart eigenschappen gebruiken.

De belangrijkste reden om de IWebPart interface zelf te implementeren, in een aangepast WebPart besturingselement of een ander serverbeheer, is als u de standaard implementatie wilt wijzigen. U wilt bijvoorbeeld standaardwaarden opgeven voor sommige eigenschappen. Een andere reden om de interface in een gebruikers- of serverbesturingselement te implementeren, is dat de ontwerpervaring voor het werken met deze eigenschappen op het besturingselement wordt verbeterd.

Eigenschappen

Name Description
CatalogIconImageUrl

Hiermee haalt u de URL op of stelt u deze in op een afbeelding die een WebPart besturingselement in een catalogus met besturingselementen vertegenwoordigt.

Description

Hiermee haalt u een korte woordgroep op die samenvat wat een besturingselement doet, voor gebruik in Knopinfo en catalogi van WebPart besturingselementen.

Subtitle

Hiermee haalt u een tekenreeks op die is samengevoegd met de Title eigenschapswaarde om een volledige titel voor een WebPart besturingselement te vormen.

Title

Hiermee haalt u de titel van een WebPart besturingselement op of stelt u deze in.

TitleIconImageUrl

Hiermee haalt u de URL op of stelt u de URL in op een afbeelding die wordt gebruikt om een besturingselement voor webonderdelen weer te geven in de eigen titelbalk van het besturingselement.

TitleUrl

Hiermee wordt een URL opgehaald of ingesteld op aanvullende informatie over een WebPart besturingselement.

Van toepassing op

Zie ook