IWebPart Gränssnitt

Definition

Definierar vanliga användargränssnittsegenskaper (UI) som används av kontrollerna ASP.NET WebPart.

public interface class IWebPart
public interface IWebPart
type IWebPart = interface
Public Interface IWebPart
Härledda

Exempel

Följande kodexempel visar hur du implementerar IWebPart gränssnittet i en användarkontroll. Det här är en enkel implementering som visar minimalt hur du implementerar egenskaperna.

Den första delen av kodexemplet visar användarkontrollen. Användarkontrollen implementerar alla egenskaper för IWebPart gränssnittet, plus två ytterligare offentliga egenskaper som är knutna till kontroller i användargränssnittet. De två anpassade egenskaperna använder Personalizable attributet, vilket gör att värdena i dessa egenskaper kan sparas mellan webbläsarsessioner. Observera att i basklassimplementeringen WebPart implementeras även alla egenskaper IWebPart för gränssnittet som anpassningsbara, även om de inte finns i det här kodexemplet.

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

Den andra delen av kodexemplet visar webbsidan som är värd för användarkontrollen. Sidan har en WebPartZone kontroll som användarkontrollen refereras till inom. Observera att flera av IWebPart gränssnittets egenskapsvärden anges deklarativt i markering för användarkontrollen, vilket gör att det både fungerar och ser ut ungefär som en WebPart kontroll vid designtid och körningstid. Om du läser in sidan i en webbläsare kan du använda användargränssnittet på sidan för att visa möjligheten att programmatiskt ändra värdena för de implementerade IWebPart egenskaperna vid körning. När du ändrar några av egenskapsvärdena visas inte ändringarna på sidan, men de visas i sidkällan ( TitleIconImageUrl egenskapen) eller lagras i programmets tillståndsdata (egenskapen CatalogIconImageUrl ).

Important

Det här exemplet har en textruta som accepterar användarindata, vilket är ett potentiellt säkerhetshot. Som standard kontrollerar ASP.NET webbsidor att användarindata inte innehåller skript- eller HTML-element. Mer information finns i Översikt över skriptexploateringar.

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

Kommentarer

Gränssnittet IWebPart innehåller flera gränssnittsorienterade egenskaper som förbättrar användarupplevelsen av att arbeta med WebPart kontroller. När du skapar kontroller som härleds från basklassen WebPart får du en implementering av alla egenskaper i IWebPart gränssnittet, eftersom basklassen WebPart implementerar det här gränssnittet.

Du kan använda befintliga användarkontroller, ASP.NET kontroller eller anpassade serverkontroller som inte ärver från klassen WebPart som en del av ett webbdelsprogram, och de kan också använda dessa gränssnittsorienterade egenskaper som deklareras av gränssnittet IWebPart. Om du placerar befintliga serverkontroller i en WebPartZoneBase zon omsluts de vid körning med ett GenericWebPart objekt. GenericWebPart Eftersom klassen ärver från basklassen WebPart gör den det möjligt för befintliga serverkontroller att fungera som sanna WebPart kontroller och lägger till egenskaperna för IWebPart gränssnittet.

Om du placerar serverkontroller som inte WebPart är kontroller i zoner kan de använda IWebPart egenskaperna vid körning och du kan även deklarera värden för dessa egenskaper på serverkontroller i markering på sidan (i sidpersistenceformat). Men eftersom dessa egenskaper endast är tillgängliga för serverkontrollerna vid körning, identifierar IWebPart inte designtidskodningsfunktioner som IntelliSense egenskaper som deklareras på serverkontroller. Deklarerade egenskaper för dessa kontroller fungerar fortfarande när du läser in sidan, men Microsoft Visual Studio inte känner igen egenskaperna som giltiga vid designtillfället. Om du vill lägga IWebPart till egenskaperna till befintliga server- och användarkontroller för att förbättra användarupplevelsen för designtid kan du implementera IWebPart gränssnittet i en serverkontroll.

Kanske är den främsta anledningen till att implementera IWebPart gränssnittet för kontroller som inte stöder användning av expando-egenskaper (anpassade). Expando-egenskaper är strängar som kan läggas till i en klass dynamiskt som en egenskap, med hjälp av IAttributeAccessor gränssnittet. Kontroller som implementerar det här gränssnittet, inklusive WebControl klassen och dess underordnade, kan använda expando-egenskaper. Därför stöder alla ASP.NET serverkontroller, anpassade kontroller som härleds från dem, webbanvändarkontroller och WebPart kontroller användning av expando-egenskaper. Men anpassade kontroller som ärver direkt från basklassen Control stöder inte expando-egenskaper. Om du deklarerar dessa kontroller inom en WebPartZonekan du därför inte deklarera de gemensamma IWebPart egenskaperna för kontrollerna, egenskaper som Title och Description. Om du vill använda dessa egenskaper med sådana kontroller måste du implementera IWebPart gränssnittet.

Anteckningar till implementerare

Normalt behöver du inte implementera IWebPart gränssnittet, antingen på anpassade WebPart kontroller eller serverkontroller, eftersom basklassen WebPart redan implementerar gränssnittet. Anpassade WebPart kontroller och andra serverkontroller som placeras i WebPartZoneBase zoner kan använda alla IWebPart egenskaper.

Den främsta orsaken till att implementera gränssnittet själv, oavsett om det IWebPart är i en anpassad WebPart kontroll eller en annan serverkontroll, är om du vill ändra standardimplementeringen. Du kanske till exempel vill ange standardvärden för vissa av egenskaperna. En annan anledning till att implementera gränssnittet i en användare eller serverkontroll är att designtidsupplevelsen för att arbeta med dessa egenskaper på kontrollen förbättras.

Egenskaper

Name Description
CatalogIconImageUrl

Hämtar eller anger URL:en till en bild som representerar en WebPart kontroll i en katalog med kontroller.

Description

Hämtar eller anger en kort fras som sammanfattar vad en kontroll gör, för användning i Knappbeskrivningar och kataloger med WebPart kontroller.

Subtitle

Hämtar en sträng som sammanfogas med egenskapsvärdet Title för att skapa en fullständig rubrik för en WebPart kontroll.

Title

Hämtar eller anger rubriken för en WebPart kontroll.

TitleIconImageUrl

Hämtar eller anger URL:en till en bild som används för att representera en webbdelskontroll i kontrollens egen namnlist.

TitleUrl

Hämtar eller anger en URL till kompletterande information om en WebPart kontroll.

Gäller för

Se även