Поделиться через


IWebPart Интерфейс

Определение

Определяет общие свойства пользовательского интерфейса, используемые элементами управления ASP.NET WebPart .

public interface class IWebPart
public interface IWebPart
type IWebPart = interface
Public Interface IWebPart
Производный

Примеры

В следующем примере кода показано, как реализовать IWebPart интерфейс в пользовательском элементе управления. Это простая реализация, которая показывает минимальное способ реализации свойств.

В первой части примера кода показан элемент управления пользователем. Пользовательский элемент управления реализует все свойства интерфейса, а также два дополнительных общедоступных IWebPart свойства, привязанных к элементам управления в пользовательском интерфейсе. Эти два настраиваемых свойства используют Personalizable атрибут, который позволяет сохранять значения в этих свойствах в сеансах браузера. Обратите внимание, что в реализации базового WebPart класса все свойства IWebPart интерфейса реализуются как персонализированные, хотя они не находятся в этом примере кода.

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

Во второй части примера кода показана веб-страница, на которую размещается элемент управления пользователем. На странице есть WebPartZone элемент управления, в котором ссылается элемент управления пользователем. Обратите внимание, что несколько IWebPart значений свойств интерфейса задаются декларативно в разметке пользовательского элемента управления, что позволяет ему вести себя и отображаться аналогично WebPart элементу управления во время разработки и во время выполнения. При загрузке страницы в браузере можно использовать пользовательский интерфейс на странице для демонстрации возможности программного изменения значений реализованных IWebPart свойств во время выполнения. При изменении некоторых значений свойств изменения не отображаются на странице, но отображаются в источнике страницы ( TitleIconImageUrl свойстве) или хранятся в данных состояния приложения ( CatalogIconImageUrl свойство).

Это важно

В этом примере есть текстовое поле, которое принимает входные данные пользователя, которое является потенциальной угрозой безопасности. По умолчанию ASP.NET веб-страницы проверяют, что входные данные пользователя не включают скрипт или ЭЛЕМЕНТЫ HTML. Дополнительные сведения см. в разделе "Обзор эксплойтов скриптов".

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

Комментарии

Интерфейс IWebPart предоставляет несколько свойств, ориентированных на пользовательский интерфейс, которые повышают взаимодействие пользователей с WebPart элементами управления. При создании элементов управления, производных от базового WebPart класса, вы получаете реализацию всех свойств в интерфейсе IWebPart , так как WebPart базовый класс реализует этот интерфейс.

Вы можете использовать существующие пользовательские элементы управления, ASP.NET элементы управления или пользовательские серверные элементы управления, которые не наследуются от WebPart класса в рамках приложения веб-частей, и они также могут использовать эти свойства, ориентированные на пользовательский интерфейс, объявленные интерфейсом IWebPart . Если вы размещаете существующие серверные элементы управления в WebPartZoneBase зоне, во время выполнения они упаковываются с GenericWebPart объектом. GenericWebPart Так как класс наследует от WebPart базового класса, он позволяет существующим элементам управления сервера выступать в качестве истинных WebPart элементов управления, и он добавляет к ним свойства IWebPart интерфейса.

Если серверные элементы управления не WebPart являются элементами управления в зонах, они могут использовать IWebPart свойства во время выполнения, а также объявлять значения этих свойств на серверных элементах управления в разметке страницы (в формате сохраняемости страниц). Однако, поскольку эти свойства доступны только серверным элементам управления во время выполнения, функции программирования во время разработки, такие как IntelliSense, не распознают IWebPart свойства, объявленные на серверных элементах управления. Объявленные свойства этих элементов управления по-прежнему работают при загрузке страницы, но Microsoft Visual Studio не распознает свойства как допустимые во время разработки. Если вы хотите добавить свойства к IWebPart существующим серверам и пользовательским элементам управления для улучшения пользовательского интерфейса во время разработки, можно реализовать IWebPart интерфейс в серверном элементе управления.

Возможно, основная причина реализации IWebPart интерфейса заключается в элементах управления, которые не поддерживают использование свойств expando (custom). Свойства expando — это строки, которые можно добавлять в класс динамически как свойство с помощью IAttributeAccessor интерфейса. Элементы управления, реализующие этот интерфейс, включая WebControl класс и его дочерние элементы, могут использовать свойства expando. Поэтому все элементы управления ASP.NET сервера, пользовательские элементы управления, производные от них, элементы управления веб-пользователей и WebPart элементы управления поддерживают использование свойств expando. Но пользовательские элементы управления, наследуемые непосредственно от базового Control класса, не поддерживают свойства expando. Таким образом, если вы объявляете эти элементы управления в пределах WebPartZone, вы не сможете объявлять общие IWebPart свойства элементов управления, такие как Title и Description. Если вы хотите использовать эти свойства с такими элементами IWebPart управления, необходимо реализовать интерфейс.

Примечания для тех, кто реализует этот метод

Как правило, не требуется реализовать IWebPart интерфейс на пользовательских WebPart элементах управления или серверных элементах управления, так как базовый WebPart класс уже реализует интерфейс. Пользовательские WebPart элементы управления и другие серверные элементы управления, размещенные в WebPartZoneBase зонах, могут использовать все IWebPart свойства.

Основная причина реализации IWebPart интерфейса, будь то в пользовательском WebPart элементе управления или другом серверном элементе управления, заключается в том, чтобы изменить реализацию по умолчанию. Например, может потребоваться указать значения по умолчанию для некоторых свойств. Еще одна причина реализации интерфейса в пользовательском или серверном элементе управления заключается в том, что взаимодействие с этими свойствами в элементе управления будет улучшено во время разработки.

Свойства

Имя Описание
CatalogIconImageUrl

Получает или задает URL-адрес изображения, представляющего WebPart элемент управления в каталоге элементов управления.

Description

Возвращает или задает краткую фразу, которая суммирует то, что делает элемент управления, для использования в подсказках и каталогах WebPart элементов управления.

Subtitle

Получает строку, сцепленную со Title значением свойства для формирования полного заголовка WebPart элемента управления.

Title

Возвращает или задает заголовок WebPart элемента управления.

TitleIconImageUrl

Возвращает или задает URL-адрес изображения, используемого для представления элемента управления веб-частей в собственной строке заголовка элемента управления.

TitleUrl

Возвращает или задает URL-адрес для дополнительных сведений об элементе WebPart управления.

Применяется к

См. также раздел