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


IWebPart Интерфейс

Определение

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

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 (пользовательских). Свойства 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.

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

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