WebPartConnection.IsActive Property
Gets a value that indicates whether a WebPartConnection object is currently established and able to exchange data between its provider and consumer controls.
Assembly: System.Web (in System.Web.dll)
The IsActive property indicates a state of a WebPartConnection object. When the connection is in this state, the provider and consumer controls in the connection are communicating and able to exchange data through a common interface or a WebPartTransformer object.
When a user views a rendered page that includes an established connection in normal browse mode, the connection is typically active (unless it failed to be activated due to some conflict or other issue when the page loaded). In the early stages of the page and control life cycle, the property value is false. The connection is activated just after the ConnectionsActivated event on the WebPartManager control is raised. Specifically, the connection is activated after the consumer has retrieved an instance of the specified interface from the provider or a WebPartTransformer object.
It is useful to know whether a connection is active in situations where there might be conflicts or synchronization issues due to multiple connections on a page. For example, if there is some kind of conflict between two connections, the WebPartManager control has the option of not activating one of the connections to avoid the conflict.
The following code example demonstrates use of the IsActive property.
The example has three parts:
Source code for an interface and two WebPart controls acting as the provider and the consumer for a connection.
A Web page to host all the controls and run the code example.
An explanation of how to run the example page.
The first part of the code example is the source code for the interface, and the consumer and provider controls. For the code example to run, you must compile this source code. You can compile it explicitly and put the resulting assembly in your Web site's Bin folder or the global assembly cache. Alternatively, you can put the source code in your site's App_Code folder, where it will be dynamically compiled at run time. This code example uses dynamic compilation. For a walkthrough that demonstrates how to compile, see Walkthrough: Developing and Using a Custom Web Server Control.
Imports System 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 Provider", "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 Consumer", "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 'OnPreRender Protected Overrides Sub CreateChildControls() Controls.Clear() DisplayContent = New Label() Me.Controls.Add(DisplayContent) End Sub End Class End Namespace
The second part of the code example is the Web page. Near the top is a Register directive that refers to the source code for the two dynamically compiled WebPart controls. The static connection is declared within the <StaticConnections> element on the page. Within the <script> element are four event handlers. Each event handler checks the value of the IsActive property on the static connection, and writes a message to the Label control indicating whether the connection is active or inactive at that state of the page and control life cycle. This demonstrates at what point the connection becomes active, and that it remains active after the page is rendered.
<%@ Page Language="VB" %> <%@ 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 conn As WebPartConnection = mgr.StaticConnections(0) If conn.IsActive Then lbl1.Text += "<em>Connection 0 is active.</em>" Else lbl1.Text += "Connection 0 is inactive." End If End Sub Protected Sub mgr_ConnectionsActivated(ByVal sender As Object, _ ByVal e As System.EventArgs) If mgr.Connections(0).IsActive Then lbl2.Text += "<em>Connection 0 is active.</em>" Else lbl2.Text += "Connection 0 is inactive." End If End Sub Protected Sub mgr_ConnectionsActivating(ByVal sender As Object, _ ByVal e As System.EventArgs) If mgr.Connections(0).IsActive Then lbl3.Text += "<em>Connection 0 is active.</em>" Else lbl3.Text += "Connection 0 is inactive." End If End Sub Protected Sub Page_PreRender(ByVal sender As Object, _ ByVal e As System.EventArgs) If mgr.Connections(0).IsActive Then lbl4.Text += "<em>Connection 0 is active.</em>" Else lbl4.Text += "Connection 0 is inactive." End If End Sub </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:WebPartManager ID="mgr" runat="server" OnConnectionsActivated="mgr_ConnectionsActivated" OnConnectionsActivating="mgr_ConnectionsActivating"> <StaticConnections> <asp:WebPartConnection ID="conn1" ConsumerConnectionPointID="ZipCodeConsumer" ConsumerID="weather1" ProviderConnectionPointID="ZipCodeProvider" ProviderID="zip1" /> </StaticConnections> </asp:WebPartManager> <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="Connection Details" OnClick="Button1_Click" /> <br /> <asp:Label ID="lbl1" runat="server"> <h3>Button_Click Status</h3> </asp:Label> <br /> <asp:Label ID="lbl2" runat="server"> <h3>ConnectionActivating Status</h3> </asp:Label> <br /> <asp:Label ID="lbl3" runat="server"> <h3>ConnectionActivated Status</h3> </asp:Label> <br /> <asp:Label ID="lbl4" runat="server"> <h3>ConnectionActivated Status</h3> </asp:Label> </div> </form> </body> </html>
Load the page in a browser. The static connection is already created, and messages have already been written to the labels showing whether the connection was active at various points in the page and control life cycle. Click the Connection Details button, and note that the connection is not active at that point, but that the connection is reactivated each time after the ConnectionsActivated event, and that it is still active (and will remain so) after the PreRender event of the page.
Available since 2.0