ConnectionPoint Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Fungeert als de basisklasse voor het definiëren van verbindingspuntobjecten waarmee het consumentenbeheer en het providerbeheer in een webonderdelenverbinding gegevens kunnen delen.
public ref class ConnectionPoint abstract
public abstract class ConnectionPoint
type ConnectionPoint = class
Public MustInherit Class ConnectionPoint
- Overname
-
ConnectionPoint
- Afgeleid
Voorbeelden
In het volgende codevoorbeeld ziet u hoe u een verbinding met webonderdelen maakt die de vereiste ConnectionPoint objecten bevat. Omdat de ConnectionPoint klasse een abstracte basisklasse is, zijn exemplaren van de onderliggende klassen enProviderConnectionPointConsumerConnectionPoint-- de werkelijke objecten die worden gebruikt om een verbinding te vormen.
Het voorbeeld heeft vier delen:
Een gebruikersbeheer waarmee u de weergavemodus voor webonderdelen op een pagina kunt wijzigen.
Broncode voor een interface en twee WebPart besturingselementen die fungeren als de provider en de consument voor een verbinding.
Een webpagina om alle besturingselementen te hosten en het codevoorbeeld uit te voeren.
Een uitleg over het uitvoeren van de voorbeeldpagina.
Het eerste deel van dit codevoorbeeld is het gebruikersbeheer waarmee gebruikers weergavemodi op een webpagina kunnen wijzigen. Sla de volgende broncode op in een .ascx-bestand, waardoor het de bestandsnaam krijgt die is toegewezen aan het Src kenmerk van de Register instructie voor dit gebruikersbeheer, dat zich boven aan de hostingwebpagina bevindt. Zie Overzicht: Weergavemodi wijzigen op een pagina met webonderdelen voor meer informatie over weergavemodi en een beschrijving van de broncode in dit besturingselement.
<%@ control language="C#" classname="DisplayModeMenuCS"%>
<script runat="server">
// Use a field to reference the current WebPartManager.
WebPartManager _manager;
void Page_Init(object sender, EventArgs e)
{
Page.InitComplete += new EventHandler(InitComplete);
}
void InitComplete(object sender, System.EventArgs e)
{
_manager = WebPartManager.GetCurrentWebPartManager(Page);
String browseModeName = WebPartManager.BrowseDisplayMode.Name;
// Fill the dropdown with the names of supported display modes.
foreach (WebPartDisplayMode mode in _manager.SupportedDisplayModes)
{
String modeName = mode.Name;
// Make sure a mode is enabled before adding it.
if (mode.IsEnabled(_manager))
{
ListItem item = new ListItem(modeName, modeName);
DisplayModeDropdown.Items.Add(item);
}
}
// If shared scope is allowed for this user, display the scope-switching
// UI and select the appropriate radio button for the current user scope.
if (_manager.Personalization.CanEnterSharedScope)
{
Panel2.Visible = true;
if (_manager.Personalization.Scope == PersonalizationScope.User)
RadioButton1.Checked = true;
else
RadioButton2.Checked = true;
}
}
// Change the page to the selected display mode.
void DisplayModeDropdown_SelectedIndexChanged(object sender, EventArgs e)
{
String selectedMode = DisplayModeDropdown.SelectedValue;
WebPartDisplayMode mode = _manager.SupportedDisplayModes[selectedMode];
if (mode != null)
_manager.DisplayMode = mode;
}
// Set the selected item equal to the current display mode.
void Page_PreRender(object sender, EventArgs e)
{
ListItemCollection items = DisplayModeDropdown.Items;
int selectedIndex =
items.IndexOf(items.FindByText(_manager.DisplayMode.Name));
DisplayModeDropdown.SelectedIndex = selectedIndex;
}
// Reset all of a user's personalization data for the page.
protected void LinkButton1_Click(object sender, EventArgs e)
{
_manager.Personalization.ResetPersonalizationState();
}
// If not in User personalization scope, toggle into it.
protected void RadioButton1_CheckedChanged(object sender, EventArgs e)
{
if (_manager.Personalization.Scope == PersonalizationScope.Shared)
_manager.Personalization.ToggleScope();
}
// If not in Shared scope, and if user is allowed, toggle the scope.
protected void RadioButton2_CheckedChanged(object sender, EventArgs e)
{
if (_manager.Personalization.CanEnterSharedScope &&
_manager.Personalization.Scope == PersonalizationScope.User)
_manager.Personalization.ToggleScope();
}
</script>
<div>
<asp:Panel ID="Panel1" runat="server"
Borderwidth="1"
Width="230"
BackColor="lightgray"
Font-Names="Verdana, Arial, Sans Serif" >
<asp:Label ID="Label1" runat="server"
Text=" Display Mode"
Font-Bold="true"
Font-Size="8"
Width="120"
AssociatedControlID="DisplayModeDropdown"/>
<asp:DropDownList ID="DisplayModeDropdown" runat="server"
AutoPostBack="true"
Width="120"
OnSelectedIndexChanged="DisplayModeDropdown_SelectedIndexChanged" />
<asp:LinkButton ID="LinkButton1" runat="server"
Text="Reset User State"
ToolTip="Reset the current user's personalization data for the page."
Font-Size="8"
OnClick="LinkButton1_Click" />
<asp:Panel ID="Panel2" runat="server"
GroupingText="Personalization Scope"
Font-Bold="true"
Font-Size="8"
Visible="false" >
<asp:RadioButton ID="RadioButton1" runat="server"
Text="User"
AutoPostBack="true"
GroupName="Scope" OnCheckedChanged="RadioButton1_CheckedChanged" />
<asp:RadioButton ID="RadioButton2" runat="server"
Text="Shared"
AutoPostBack="true"
GroupName="Scope"
OnCheckedChanged="RadioButton2_CheckedChanged" />
</asp:Panel>
</asp:Panel>
</div>
<%@ control language="vb" classname="DisplayModeMenuVB"%>
<script runat="server">
' Use a field to reference the current WebPartManager.
Dim _manager As WebPartManager
Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs)
AddHandler Page.InitComplete, AddressOf InitComplete
End Sub
Sub InitComplete(ByVal sender As Object, ByVal e As System.EventArgs)
_manager = WebPartManager.GetCurrentWebPartManager(Page)
Dim browseModeName As String = WebPartManager.BrowseDisplayMode.Name
' Fill the dropdown with the names of supported display modes.
Dim mode As WebPartDisplayMode
For Each mode In _manager.SupportedDisplayModes
Dim modeName As String = mode.Name
' Make sure a mode is enabled before adding it.
If mode.IsEnabled(_manager) Then
Dim item As New ListItem(modeName, modeName)
DisplayModeDropdown.Items.Add(item)
End If
Next mode
' If shared scope is allowed for this user, display the scope-switching
' UI and select the appropriate radio button for the current user scope.
If _manager.Personalization.CanEnterSharedScope Then
Panel2.Visible = True
If _manager.Personalization.Scope = PersonalizationScope.User Then
RadioButton1.Checked = True
Else
RadioButton2.Checked = True
End If
End If
End Sub
' Change the page to the selected display mode.
Sub DisplayModeDropdown_SelectedIndexChanged(ByVal sender As Object, _
ByVal e As EventArgs)
Dim selectedMode As String = DisplayModeDropdown.SelectedValue
Dim mode As WebPartDisplayMode = _
_manager.SupportedDisplayModes(selectedMode)
If Not (mode Is Nothing) Then
_manager.DisplayMode = mode
End If
End Sub
' Set the selected item equal to the current display mode.
Sub Page_PreRender(ByVal sender As Object, ByVal e As EventArgs)
Dim items As ListItemCollection = DisplayModeDropdown.Items
Dim selectedIndex As Integer = _
items.IndexOf(items.FindByText(_manager.DisplayMode.Name))
DisplayModeDropdown.SelectedIndex = selectedIndex
End Sub
' Reset all of a user's personalization data for the page.
Protected Sub LinkButton1_Click(ByVal sender As Object, _
ByVal e As EventArgs)
_manager.Personalization.ResetPersonalizationState()
End Sub
' If not in User personalization scope, toggle into it.
Protected Sub RadioButton1_CheckedChanged(ByVal sender As Object, _
ByVal e As EventArgs)
If _manager.Personalization.Scope = PersonalizationScope.Shared Then
_manager.Personalization.ToggleScope()
End If
End Sub
' If not in Shared scope, and if user is allowed, toggle the scope.
Protected Sub RadioButton2_CheckedChanged(ByVal sender As Object, _
ByVal e As EventArgs)
If _manager.Personalization.CanEnterSharedScope AndAlso _
_manager.Personalization.Scope = PersonalizationScope.User Then
_manager.Personalization.ToggleScope()
End If
End Sub
</script>
<div>
<asp:Panel ID="Panel1" runat="server"
Borderwidth="1"
Width="230"
BackColor="lightgray"
Font-Names="Verdana, Arial, Sans Serif" >
<asp:Label ID="Label1" runat="server"
Text=" Display Mode"
Font-Bold="true"
Font-Size="8"
Width="120"
AssociatedControlID="DisplayModeDropdown"/>
<asp:DropDownList ID="DisplayModeDropdown" runat="server"
AutoPostBack="true"
Width="120"
OnSelectedIndexChanged="DisplayModeDropdown_SelectedIndexChanged" />
<asp:LinkButton ID="LinkButton1" runat="server"
Text="Reset User State"
ToolTip="Reset the current user's personalization data for the page."
Font-Size="8"
OnClick="LinkButton1_Click" />
<asp:Panel ID="Panel2" runat="server"
GroupingText="Personalization Scope"
Font-Bold="true"
Font-Size="8"
Visible="false" >
<asp:RadioButton ID="RadioButton1" runat="server"
Text="User"
AutoPostBack="true"
GroupName="Scope" OnCheckedChanged="RadioButton1_CheckedChanged" />
<asp:RadioButton ID="RadioButton2" runat="server"
Text="Shared"
AutoPostBack="true"
GroupName="Scope"
OnCheckedChanged="RadioButton2_CheckedChanged" />
</asp:Panel>
</asp:Panel>
</div>
Het tweede deel van het codevoorbeeld is de broncode voor de interface en besturingselementen. Het bronbestand bevat een eenvoudige interface met de naam IZipCode. Er is ook een klasse met de WebPart naam ZipCodeWebPart die de interface implementeert en fungeert als het providerbeheer. De ProvideIZipCode methode is de callback-methode die het enige lid van de interface implementeert. De methode retourneert gewoon een exemplaar van de interface. Houd er rekening mee dat de methode is gemarkeerd met een ConnectionProvider kenmerk in de metagegevens. Dit is het mechanisme voor het identificeren van de methode als de callback-methode voor het verbindingspunt van de provider. De andere WebPart klasse heeft de naam WeatherWebParten fungeert als de consument voor de verbinding. Deze klasse heeft een methode met de naam GetZipCode die een exemplaar van de IZipCode interface ophaalt uit het besturingselement van de provider. Houd er rekening mee dat deze methode is gemarkeerd als de verbindingspuntmethode van de consument met een ConnectionConsumer kenmerk in de metagegevens. Dit is het mechanisme voor het identificeren van de verbindingspuntmethode in het consumentenbeheer.
Als u het codevoorbeeld wilt uitvoeren, moet u deze broncode compileren. U kunt deze expliciet compileren en de resulterende assembly in de map Bin van uw website of de globale assemblycache plaatsen. U kunt de broncode ook in de map App_Code van uw site plaatsen, waar deze dynamisch wordt gecompileerd tijdens runtime. In dit codevoorbeeld wordt dynamische compilatie gebruikt. Zie Walkthrough: Een aangepast webserverbeheer ontwikkelen en gebruiken voor een overzicht van hoe u compileert.
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 Provider", "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 Consumer", "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 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
Protected Overrides Sub CreateChildControls()
Controls.Clear()
DisplayContent = New Label()
Me.Controls.Add(DisplayContent)
End Sub
End Class
End Namespace
Het derde deel van het codevoorbeeld is de webpagina. Bovenaan staan Register instructies voor het registreren van de aangepaste besturingselementen die de verbinding vormen en het gebruikersbesturingselement waarmee gebruikers weergavemodi op de pagina kunnen wijzigen. De verbinding zelf wordt declaratief gemaakt binnen het <staticconnections> element op de pagina. U kunt de verbinding ook programmatisch maken; de code hiervoor is opgenomen in de Button1_Click methode. Ongeacht of de verbinding declaratief of programmatisch wordt gemaakt, moeten verbindingspunten altijd worden opgegeven voor zowel de provider als de consument. De Button2_Click methode opent de ConnectionPoint objecten voor zowel de provider als de consument en schrijft enkele eigenschapswaarden naar een label op de pagina.
<%@ 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"];
if(mgr.CanConnectWebParts(zip1, provPoint, weather1, connPoint))
mgr.ConnectWebParts(zip1, provPoint, weather1, connPoint);
}
protected void Button2_Click(object sender, EventArgs e)
{
WebPartConnection conn = mgr.Connections[0];
lblConn.Text = "<h2>Connection Point Details</h2>" +
"<h3>Provider Connection Point</h3>" +
" Display name: " + conn.ProviderConnectionPoint.DisplayName +
"<br />" +
" ID: " + conn.ProviderConnectionPoint.ID +
"<br />" +
" Interface type: " +
conn.ProviderConnectionPoint.InterfaceType.ToString() +
"<br />" +
" Control type: " + conn.ProviderConnectionPoint.ControlType.ToString() +
"<br />" +
" Allows multiple connections: " +
conn.ProviderConnectionPoint.AllowsMultipleConnections.ToString() +
"<br />" +
" Enabled: " + conn.ProviderConnectionPoint.GetEnabled(zip1).ToString() +
"<hr />" +
"<h3>Consumer Connection Point</h3>" +
" Display name: " + conn.ConsumerConnectionPoint.DisplayName +
"<br />" +
" ID: " + conn.ConsumerConnectionPoint.ID +
"<br />" +
" Interface type: " + conn.ConsumerConnectionPoint.InterfaceType.ToString() +
"<br />" +
" Control type: " + conn.ConsumerConnectionPoint.ControlType.ToString() +
"<br />" +
" Allows multiple connections: " +
conn.ConsumerConnectionPoint.AllowsMultipleConnections.ToString() +
"<br />" +
" Enabled: " + conn.ConsumerConnectionPoint.GetEnabled(zip1).ToString();
}
protected void Page_Load(object sender, EventArgs e)
{
lblConn.Text = String.Empty;
}
</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" >
<StaticConnections>
<asp:WebPartConnection ID="conn1"
ConsumerConnectionPointID="ZipCodeConsumer"
ConsumerID="weather1"
ProviderConnectionPointID="ZipCodeProvider"
ProviderID="zip1" />
</StaticConnections>
</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="Dynamic Connection"
OnClick="Button1_Click" />
<br />
<asp:Button ID="Button2" runat="server"
Text="Connection Point Details"
OnClick="Button2_Click" />
<br />
<asp:Label ID="lblConn" runat="server" />
</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 provPoint As ProviderConnectionPoint = _
mgr.GetProviderConnectionPoints(zip1)("ZipCodeProvider")
Dim connPoint As ConsumerConnectionPoint = _
mgr.GetConsumerConnectionPoints(weather1)("ZipCodeConsumer")
If mgr.CanConnectWebParts(zip1, provPoint, weather1, connPoint) Then
mgr.ConnectWebParts(zip1, provPoint, weather1, connPoint)
End If
End Sub
Protected Sub Button2_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Dim conn As WebPartConnection = mgr.Connections(0)
lblConn.Text = "<h2>Connection Point Details</h2>" & _
"<h3>Provider Connection Point</h3>" & _
" Display name: " & conn.ProviderConnectionPoint.DisplayName & _
"<br />" & _
" ID: " & conn.ProviderConnectionPoint.ID & _
"<br />" & _
" Interface type: " & conn.ProviderConnectionPoint.InterfaceType.ToString() & _
"<br />" & _
" Control type: " & conn.ProviderConnectionPoint.ControlType.ToString() & _
"<br />" & _
" Allows multiple connections: " & _
conn.ProviderConnectionPoint.AllowsMultipleConnections.ToString() & _
"<br />" & _
" Enabled: " & conn.ProviderConnectionPoint.GetEnabled(zip1).ToString() & _
"<hr />" & _
"<h3>Consumer Connection Point</h3>" & _
" Display name: " & conn.ConsumerConnectionPoint.DisplayName & _
"<br />" & _
" ID: " & conn.ConsumerConnectionPoint.ID & _
"<br />" & _
" Interface type: " & conn.ConsumerConnectionPoint.InterfaceType.ToString() & _
"<br />" & _
" Control type: " & conn.ConsumerConnectionPoint.ControlType.ToString() & _
"<br />" & _
" Allows multiple connections: " & _
conn.ConsumerConnectionPoint.AllowsMultipleConnections.ToString() & _
"<br />" & _
" Enabled: " & conn.ConsumerConnectionPoint.GetEnabled(zip1).ToString()
End Sub
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs)
lblConn.Text = String.Empty
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" >
<StaticConnections>
<asp:WebPartConnection ID="conn1"
ConsumerConnectionPointID="ZipCodeConsumer"
ConsumerID="weather1"
ProviderConnectionPointID="ZipCodeProvider"
ProviderID="zip1" />
</StaticConnections>
</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="Dynamic Connection"
OnClick="Button1_Click" />
<br />
<asp:Button ID="Button2" runat="server"
Text="Connection Point Details"
OnClick="Button2_Click" />
<br />
<asp:Label ID="lblConn" runat="server" />
</div>
</form>
</body>
</html>
Nadat u de pagina in een browser hebt geladen, klikt u op de knop Details van verbindingspunt . Informatie over de provider- en consumentenaansluitpunten die in de declaratieve verbinding tot stand zijn gebracht, wordt weergegeven. Gebruik vervolgens het vervolgkeuzemenu Weergavemodus om de pagina over te schakelen naar de verbindingsmodus. Klik in het menu Werkwoorden van een van de WebPart besturingselementen (vertegenwoordigd door een pijl-omlaag in de titelbalk) op het verbindingswerkwoord. De verbindingsgebruikersinterface wordt automatisch gemaakt door het <asp:connectionszone> besturingselement dat op de pagina is gedeclareerd. Klik op de knop Verbinding verbreken om de bestaande verbinding te beëindigen. Gebruik het besturingselement Weergavemodus om de pagina te retourneren om door de bladermodus te bladeren. Klik vervolgens op de knop Dynamische verbinding om programmatisch een verbinding te maken. Klik nogmaals op de knop Details van verbindingspunt om details over de twee verbindingspuntobjecten aan te geven.
Opmerkingen
Elke verbinding met webonderdelen bestaat uit twee serverbesturingselementen voor het delen van gegevens: het ene besturingselement is de consument, de andere is de provider. Zie het klassenoverzicht voor een bespreking van de essentiële onderdelen van een webonderdelenverbinding en het verbindingsobject zelf WebPartConnection . Voor elke verbinding met webonderdelen zijn verbindingspunten vereist. De provider en het consumentenbeheer moeten elk ten minste één gedefinieerd ConnectionPoint object hebben (elk ervan kan desgewenst meerdere verbindingspunten hebben) die de details bevatten voor de manier waarop een besturingselement verbinding kan maken met een ander besturingselement en het type gegevens dat het kan delen. In een werkelijke verbinding heeft de provider een eigen type verbindingspuntobject (afgeleid van de basisklasse ConnectionPoint ), een ProviderConnectionPoint exemplaar en heeft de consument een eigen object, een ConsumerConnectionPoint exemplaar.
Om een providerverbindingspunt te maken, moeten ontwikkelaars een callback-methode toevoegen aan de provider die een geïmplementeerd interface-exemplaar retourneert aan een consument. Ze moeten de callback-methode in de broncode markeren met een ConnectionProvider codekenmerk (zie de ConnectionProviderAttribute klasse). Om een consumentenverbindingspunt te maken, moeten ontwikkelaars ook een methode toevoegen aan de consument die een interface-exemplaar ontvangt, en moeten ze die methode markeren met een ConnectionConsumer kenmerk (zie de ConnectionConsumerAttribute klasse).
Wanneer ontwikkelaars verbindingen maken op een webpagina, kunnen ze worden gemaakt als statische of dynamische verbindingen. Statische verbindingen worden gedeclareerd in de markering van een webpagina. Wanneer een statische verbinding wordt gedeclareerd, kunnen ontwikkelaars aangeven welke verbindingspunten worden gebruikt voor zowel de consument als de provider door waarden toe te wijzen aan de ProviderConnectionPointID en ConsumerConnectionPointID kenmerken binnen de <asp:webpartconnection> elementtag. Deze methode is vooral handig als er meerdere verbindingspunten zijn gedefinieerd binnen de besturingselementen van de consument en provider, omdat hiermee de statische verbinding kan worden geïdentificeerd welke verbindingspunten voor de verbinding moeten worden gebruikt.
Dynamische verbindingen worden programmatisch gemaakt door de code van een ontwikkelaar of door gebruikers via de gebruikersinterface (UI) die door het ConnectionsZone besturingselement wordt geleverd. Als u een verbinding in code wilt maken, moeten ontwikkelaars een exemplaar van een WebPartConnection object ophalen door de ConnectWebParts methode op het WebPartManager besturingselement aan te roepen. Voordat ze deze methode kunnen aanroepen, moeten ontwikkelaars verwijzingen hebben naar de besturingselementen van de consument- en providerserver en hun respectieve verbindingspuntobjecten. Ontwikkelaars roepen eerst de GetProviderConnectionPoints en GetConsumerConnectionPoints methoden voor het WebPartManager besturingselement aan om verwijzingen naar de verbindingspunten voor een provider en een consumentenbeheer op te halen. Deze methoden retourneren de juiste verbindingspuntobjecten die op hun beurt kunnen worden doorgegeven aan de methode voor het maken van een verbinding.
Wanneer de verbindingspuntobjecten van de provider en de consument beide werken met hetzelfde type interface, zijn ze compatibel en kunnen ze een directe verbinding vormen om gegevens te delen. Als ze niet met hetzelfde interfacetype werken, moet een WebPartTransformer object worden gebruikt om het interface-exemplaar van de provider te vertalen naar een type waarmee de consument kan werken.
De abstracte ConnectionPoint klasse biedt de basisdetails van verbindingspunten die worden gedeeld door zowel consumenten- als providerbesturingselementen. Verschillende eigenschappen bevatten deze details. De AllowsMultipleConnections eigenschap geeft aan of een verbindingspunt kan deelnemen aan meer dan één verbinding tegelijk. Standaard kunnen provideraansluitpunten deelnemen aan meerdere verbindingen en kunnen consumentenaansluitpunten niet. De ControlType eigenschap geeft het type serverbesturingselement aan dat is gekoppeld aan een verbindingspunt. Houd er rekening mee dat niet alleen WebPart besturingselementen verbindingen kunnen vormen; elk serverbeheer, ongeacht of een ASP.NET besturingselement, een aangepast besturingselement of een gebruikersbeheer, kan worden ingeschakeld om deel te nemen aan verbindingen als deze in een WebPartZoneBase zone worden geplaatst. De DisplayName eigenschap biedt een beschrijvende naam voor het verbindingspunt dat kan worden weergegeven in de gebruikersinterface om gebruikers te helpen die verbindingen maken. De ID eigenschap fungeert als een tekenreeks-id voor het verbindingspuntobject zelf. De InterfaceType eigenschap geeft aan welk type interface-exemplaar het verbindingspunt begrijpt. Of een bepaald verbindingspunt een exemplaar van die interface levert of verbruikt, wordt bepaald door of het een ProviderConnectionPoint of een ConsumerConnectionPoint object is.
De ConnectionPoint klasse heeft één methode. De GetEnabled methode retourneert een Booleaanse waarde die aangeeft of een verbindingspunt momenteel aan verbindingen kan deelnemen.
De ConnectionPoint klasse heeft ook één openbaar veld, DefaultID. Dit veld bevat een waarde die wordt gebruikt om het standaardverbindingspunt in een verbinding te identificeren.
Note
De kenmerken voor het opgeven van verbindingspuntmethoden hebben slechts één vereiste parameter, displayNamedus het is mogelijk om het standaardaansluitpuntkenmerk te maken zonder een id op te geven. In dergelijke gevallen levert het DefaultID veld een basiswaarde die moet worden gebruikt.
Velden
| Name | Description |
|---|---|
| DefaultID |
Vertegenwoordigt een tekenreeks die wordt gebruikt om het standaardverbindingspunt te identificeren binnen een verzameling verbindingspunten die zijn gekoppeld aan een serverbesturing. |
Eigenschappen
| Name | Description |
|---|---|
| AllowsMultipleConnections |
Hiermee wordt een waarde opgehaald die aangeeft of een verbindingspunt meerdere gelijktijdige verbindingen ondersteunt. |
| ControlType |
Hiermee haalt u het Type serverbeheer op waarmee een verbindingspunt is gekoppeld. |
| DisplayName |
Hiermee haalt u een tekenreeks op die fungeert als een beschrijvende weergavenaam die een verbindingspunt in de gebruikersinterface (UI) vertegenwoordigt. |
| ID |
Hiermee haalt u een tekenreeks op die de id voor een verbindingspunt bevat. |
| InterfaceType |
Hiermee haalt u het type van de interface op dat wordt gebruikt door een verbindingspunt. |
Methoden
| Name | Description |
|---|---|
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. (Overgenomen van Object) |
| GetEnabled(Control) |
Retourneert een waarde die aangeeft of een verbindingspunt kan deelnemen aan verbindingen. |
| GetHashCode() |
Fungeert als de standaardhashfunctie. (Overgenomen van Object) |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |