WebPartManager.DisconnectWebParts(WebPartConnection) 方法

定义

执行断开网页中连接的服务器控件的过程。Carries out the process of disconnecting server controls that are connected on a Web page.

public:
 virtual void DisconnectWebParts(System::Web::UI::WebControls::WebParts::WebPartConnection ^ connection);
public virtual void DisconnectWebParts (System.Web.UI.WebControls.WebParts.WebPartConnection connection);
abstract member DisconnectWebParts : System.Web.UI.WebControls.WebParts.WebPartConnection -> unit
override this.DisconnectWebParts : System.Web.UI.WebControls.WebParts.WebPartConnection -> unit
Public Overridable Sub DisconnectWebParts (connection As WebPartConnection)

参数

connection
WebPartConnection

表示服务器控件之间的连接的 WebPartConnectionA WebPartConnection that represents the connection between server controls.

异常

connectionnullconnection is null.

connection 未包含在 StaticConnectionsDynamicConnections 中。connection is not contained in either StaticConnections or DynamicConnections.

StaticConnections 为只读。StaticConnections is read-only.

- 或 --or- connection 已从 StaticConnections 断开。connection has already been disconnected from StaticConnections.

-or- DynamicConnections 为只读。DynamicConnections is read-only.

- 或 --or- connection 已从 DynamicConnections 断开。connection has already been disconnected from DynamicConnections.

示例

下面的代码示例演示如何使用 DisconnectWebParts 方法。The following code example demonstrates how to use the DisconnectWebParts method. 通过使用两WebPart个自定义控件,可通过单击按钮在控件之间创建连接,而使用另一个按钮可以断开控件的连接。Using two custom WebPart controls, the Web page enables you to create a connection between the controls by clicking a button, while another button enables you to disconnect the controls.

此代码示例包含四个部分:The code example has four parts:

  • 用于更改显示模式的用户控件。A user control for changing display modes.

  • 包含自定义WebPart控件的源文件。A source file containing custom WebPart controls.

  • 用于承载控件的网页。A Web page to host the controls.

  • 说明如何在浏览器中工作。An explanation of how the example works in a browser.

此代码示例的第一部分是用户控件,用于更改显示模式。The first part of the code example is the user control for changing display modes. 你可以从WebPartManager类概述的 "示例" 部分获取用户控件的源代码。You can obtain the source code for the user control from the Example section of the WebPartManager class overview. 有关显示模式和用户控件工作方式的详细信息,请参阅演练:更改 Web 部件页上的显示模式。For more information about display modes and how the user control works, see Walkthrough: Changing Display Modes on a Web Parts Page.

第二部分是一个文件,其中包含两个要连接的WebPart自定义控件的源代码。The second part is a file containing the source code for the two custom WebPart controls that will be connected. 要使代码示例运行,必须编译此源代码。For the code example to run, you must compile this source code. 可以显式编译该程序集,并将生成的程序集放在网站的 Bin 文件夹或全局程序集缓存中。You can compile it explicitly and put the resulting assembly in your Web site's Bin folder or the global assembly cache. 或者,你可以将源代码放在站点的 App_Code 文件夹中,在此文件夹中,它将在运行时动态编译。Alternatively, you can put the source code in your site's App_Code folder, where it will be dynamically compiled at run time. 此示例使用动态编译,因此Register在网页顶部声明了引用这些组件的指令。This example uses dynamic compilation, so the Register directive that references these components in the Web page is declared accordingly at the top of the Web page. 有关演示编译选项的演练,请参阅演练:开发和使用自定义 Web 服务器控件For a walkthrough that demonstrates compiling options, see Walkthrough: Developing and Using a Custom Web Server Control.

namespace Samples.AspNet.CS.Controls
{
  using System;
  using System.Web;
  using System.Web.Security;
  using System.Security.Permissions;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Web.UI.WebControls.WebParts;

  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public interface IZipCode
  {
    string ZipCode { get; set;}
  }

  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public class ZipCodeWebPart : WebPart, IZipCode
  {
    string zipCodeText = String.Empty;
    TextBox input;
    Button send;

    public ZipCodeWebPart()
    {
    }

    // Make the implemented property personalizable to save 
    // the Zip Code between browser sessions.
    [Personalizable()]
    public virtual string ZipCode
    {
      get { return zipCodeText; }
      set { zipCodeText = value; }
    }

    // This is the callback method that returns the provider.
    [ConnectionProvider("Zip Code", "ZipCodeProvider")]
    public IZipCode ProvideIZipCode()
    {
      return this;
    }

    protected override void CreateChildControls()
    {
      Controls.Clear();
      input = new TextBox();
      this.Controls.Add(input);
      send = new Button();
      send.Text = "Enter 5-digit Zip Code";
      send.Click += new EventHandler(this.submit_Click);
      this.Controls.Add(send);
    }

    private void submit_Click(object sender, EventArgs e)
    {
      if (!string.IsNullOrEmpty(input.Text))
      {
        zipCodeText = Page.Server.HtmlEncode(input.Text);
        input.Text = String.Empty;
      }
    }
  }

  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public class WeatherWebPart : WebPart
  {
    private IZipCode _provider;
    string _zipSearch;
    Label DisplayContent;

    // This method is identified by the ConnectionConsumer 
    // attribute, and is the mechanism for connecting with 
    // the provider. 
    [ConnectionConsumer("Zip Code", "ZipCodeConsumer")]
    public void GetIZipCode(IZipCode Provider)
    {
      _provider = Provider;
    }
    
    protected override void OnPreRender(EventArgs e)
    {
      EnsureChildControls();

      if (this._provider != null)
      {
        _zipSearch = _provider.ZipCode.Trim();
        DisplayContent.Text = "My Zip Code is:  " + _zipSearch;
      }
    }

    protected override void CreateChildControls()
    {
      Controls.Clear();
      DisplayContent = new Label();
      this.Controls.Add(DisplayContent);
    }
  }
}
Imports System.Web
Imports System.Web.Security
Imports System.Security.Permissions
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts

Namespace Samples.AspNet.VB.Controls

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Interface IZipCode

    Property ZipCode() As String

  End Interface

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class ZipCodeWebPart
    Inherits WebPart
    Implements IZipCode
    Private zipCodeText As String = String.Empty
    Private input As TextBox
    Private send As Button

    Public Sub New()
    End Sub

    ' Make the implemented property personalizable to save 
    ' the Zip Code between browser sessions.
    <Personalizable()> _
    Public Property ZipCode() As String _
      Implements IZipCode.ZipCode

      Get
        Return zipCodeText
      End Get
      Set(ByVal value As String)
        zipCodeText = value
      End Set
    End Property

    ' This is the callback method that returns the provider.
    <ConnectionProvider("Zip Code", "ZipCodeProvider")> _
    Public Function ProvideIZipCode() As IZipCode
      Return Me
    End Function


    Protected Overrides Sub CreateChildControls()
      Controls.Clear()
      input = New TextBox()
      Me.Controls.Add(input)
      send = New Button()
      send.Text = "Enter 5-digit Zip Code"
      AddHandler send.Click, AddressOf Me.submit_Click
      Me.Controls.Add(send)

    End Sub


    Private Sub submit_Click(ByVal sender As Object, _
      ByVal e As EventArgs)

      If input.Text <> String.Empty Then
        zipCodeText = Page.Server.HtmlEncode(input.Text)
        input.Text = String.Empty
      End If

    End Sub

  End Class

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class WeatherWebPart
    Inherits WebPart
    Private _provider As IZipCode
    Private _zipSearch As String
    Private DisplayContent As Label

    ' This method is identified by the ConnectionConsumer 
    ' attribute, and is the mechanism for connecting with 
    ' the provider. 
    <ConnectionConsumer("Zip Code", "ZipCodeConsumer")> _
    Public Sub GetIZipCode(ByVal Provider As IZipCode)
      _provider = Provider
    End Sub


    Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
      EnsureChildControls()

      If Not (Me._provider Is Nothing) Then
        _zipSearch = _provider.ZipCode.Trim()
                DisplayContent.Text = "My Zip Code is:  " + _zipSearch
      End If

    End Sub

    Protected Overrides Sub CreateChildControls()
      Controls.Clear()
      DisplayContent = New Label()
      Me.Controls.Add(DisplayContent)

    End Sub

  End Class

End Namespace

此代码示例的第三部分是网页。The third part of the code example is the Web page. 请注意,在顶部附近,它Register包含WebPart用控件注册用户控件和动态编译的程序集的指令。Notice that near the top, it contains Register directives to register the user control and the dynamically compiled assembly with the WebPart controls. 此页具有两种主要方法。The page has two primary methods. 方法在控件之间创建连接, Button2_Click并且方法断开控件的连接。 Button1_ClickThe Button1_Click method creates a connection between the controls, and the Button2_Click method disconnects the controls.

<%@ Page Language="C#" %>
<%@ Register TagPrefix="uc1" 
    TagName="DisplayModeMenuCS"
    Src="~/displaymodemenucs.ascx" %>
<%@ Register TagPrefix="aspSample" 
    Namespace="Samples.AspNet.CS.Controls" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
    
  protected void Button1_Click(object sender, EventArgs e)
  {
    ProviderConnectionPoint provPoint =
      mgr.GetProviderConnectionPoints(zip1)["ZipCodeProvider"];
    ConsumerConnectionPoint connPoint =
      mgr.GetConsumerConnectionPoints(weather1)["ZipCodeConsumer"];
    WebPartConnection conn1 = mgr.ConnectWebParts(zip1, provPoint,
      weather1, connPoint);
  }

  protected void Button2_Click(object sender, EventArgs e)
  {
    if (mgr.Connections.Count >= 1 && mgr.Connections[0] != null)
      mgr.DisconnectWebParts(mgr.Connections[0]);
  }
  

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:WebPartManager ID="mgr" runat="server">
      </asp:WebPartManager>
      <uc1:DisplayModeMenuCS ID="menu1" runat="server" />
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:ZipCodeWebPart ID="zip1" runat="server"
            Title="Zip Code Provider" />
          <aspSample:WeatherWebPart ID="weather1" runat="server" 
            Title="Zip Code Consumer" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <asp:ConnectionsZone ID="ConnectionsZone1" runat="server">
      </asp:ConnectionsZone>
      <asp:Button ID="Button1" runat="server" 
        Text="Connect WebPart Controls" 
        OnClick="Button1_Click" />
      <asp:Button ID="Button2" runat="server" 
        Text="Disconnect WebPart Controls" 
        OnClick="Button2_Click" />
    </div>
    </form>
</body>
</html>
<%@ Page Language="vb" %>
<%@ Register TagPrefix="uc1" 
    TagName="DisplayModeMenuVB"
    Src="~/displaymodemenuvb.ascx" %>
<%@ Register TagPrefix="aspSample" 
    Namespace="Samples.AspNet.VB.Controls" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

  Protected Sub Button1_Click(ByVal sender As Object, _
    ByVal e As System.EventArgs)
    
    Dim mgr As WebPartManager = _
      WebPartManager.GetCurrentWebPartManager(Page)
    Dim provPoint As ProviderConnectionPoint = _
      mgr.GetProviderConnectionPoints(zip1)("ZipCodeProvider")
    Dim connPoint As ConsumerConnectionPoint = _
      mgr.GetConsumerConnectionPoints(weather1)("ZipCodeConsumer")
    mgr.ConnectWebParts(zip1, provPoint, weather1, connPoint)

  End Sub
  
  Protected Sub Button2_Click(ByVal sender as Object, _
    ByVal e as System.EventArgs)
    
    If mgr.Connections.Count >= 1 AndAlso _
      mgr.Connections(0) IsNot Nothing Then
      mgr.DisconnectWebParts(mgr.Connections(0))
    End If
    
  End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:WebPartManager ID="mgr" runat="server">
      </asp:WebPartManager>
      <uc1:DisplayModeMenuVB ID="menu1" runat="server" />
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:ZipCodeWebPart ID="zip1" runat="server"
            Title="Zip Code Provider" />
          <aspSample:WeatherWebPart ID="weather1" runat="server" 
            Title="Zip Code Consumer" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <asp:ConnectionsZone ID="ConnectionsZone1" runat="server">
      </asp:ConnectionsZone>
      <asp:Button ID="Button1" runat="server" 
        Text="Connect WebPart Controls" 
        OnClick="Button1_Click" />
      <asp:Button ID="Button2" runat="server" 
        Text="Disconnect WebPart Controls" 
        OnClick="Button2_Click" />
    </div>
    </form>
</body>
</html>

加载页面后,可以单击 "连接" 按钮连接控件。After you load the page, you can click the Connect button to connect the controls. 如果在 "文本框" 控件中输入一些文本,然后单击 "输入" 按钮,则该文本将显示在连接的控件中(如果控件已断开连接,则不会显示)。If you enter some text in the text box control, and then click the Enter button, the text will be displayed in the connected control (it would not be displayed if the controls were disconnected). 如果单击 "断开连接" 按钮,控件将断开连接。If you click the Disconnect button, the controls will be disconnected. 您可以通过使用 "显示模式" 下拉列表控件来验证控件的连接状态,以将页面切换到连接模式。You can verify the connection status of the controls by using the Display Mode drop-down list control to switch the page into Connect mode. 完成此操作后,单击其中一个控件的标题栏中的谓词菜单(表示为箭头),然后选择 "连接" 项。After doing that, click the verbs menu (represented by an arrow) in the title bar of one of the controls, and select the Connect item. 显示连接 UI;它可用,因为在页面中<asp:connectionszone>声明了一个元素。The connection UI is displayed; it is available because there is an <asp:connectionszone> element declared in the page. 你还可以通过此 UI 连接和断开控件。You can also connect and disconnect the controls from this UI.

注解

当你向WebPart DisconnectWebParts 其传递参数时,方法将执行结束或服务器控件之间的连接connection的整个过程。The DisconnectWebParts method carries out the complete process of ending a connection between WebPart or server controls, when you pass it the connection parameter.

当你在网页中放置<asp:connectionszone>元素时,此方法用于断开控件的连接,以提供用于管理连接的用户界面(UI)。This method is used to disconnect controls when you place an <asp:connectionszone> element in a Web page, to provide a user interface (UI) for managing connections. 当页处于 connect 显示模式(ConnectDisplayMode)并且存在当前连接时,用户可以单击一个按钮,该按钮DisconnectWebParts调用方法以结束连接。When a page is in connect display mode (ConnectDisplayMode), and a current connection exists, users can click a button that calls the DisconnectWebParts method to end the connection.

如果要以编程方式DisconnectWebParts断开控件连接,而无需向页面<asp:connectionszone>添加元素,也可以直接从代码调用方法。You can also call the DisconnectWebParts method directly from your code, if you want to disconnect controls programmatically and without having to add an <asp:connectionszone> element to a page.

继承者说明

如果要更改断开DisconnectWebParts(WebPartConnection)连接WebPart控件的默认实现,可以重写方法。You can override the DisconnectWebParts(WebPartConnection) method if you want to change the default implementation for disconnecting WebPart controls. 如果确实要重写方法,而只是想要向现有方法添加一些实现,则可以在执行自己的代码之前调用基方法。If you do override the method, and you simply want to add some implementation to the existing method, you can call the base method prior to executing your own code.

适用于

另请参阅