在学习webpairts的过程刚刚可以调式并运行一些简单的例了,按照我转的ASP.NET 2.0中使用webpart系列控件 中做到通讯的时候,就开始看不懂了,因为我习惯了c#,有点看不懂vb.net所以很累,上网找一个c#研究了一下,好不容易可以把程序运行出来了,可是有的地方还是看不懂,又专门补了的一下c#的知识可是还是没有研究出来,我想做的动态通讯,可是现在做出来的静态的通讯,不管怎样是做出来的一个。以后在慢慢的研究吧。要是有那位高手看到我的发这片文章,最好能我点指点,给程序写点注释。
1:新建website
2.0里面web项目不叫project了,叫website。
2:建立代码文件夹
右击website/新建文件夹/命名为“Code”。这是2.0里面的新特性,系统会在需要的时候到名字为“Code”的文件夹下找相关定义。
3:建立简单的通讯接口。右击“Code”文件夹/新建一个类文件/命名为“IMessage”。具体定义如下。
public interface IMessage
{
string Message { get;}
}
4:建立Provider WebPart
这是一个提供服务的webpart。我们通过向上加一个UserControl来制作简单的webpart。
注意:webpart框架只是运行这个webpart,如果放入其中的Control不是直接继承自webpart或者间接使用(比如UserControl之类的),那么webpart知识包装这个Control成“GenericWebPart”。
右击website新建一个UserConrol,命名为ProviderWebPart.ascx。这个控件继承自接口IMessage;有一个具有ConnectionProvider属性的方法GetMessage,该方法会把自己(this)返回;该控件还有一个按钮和文本框,用来改变Message。
代码如下:
<%@ Control Language="C#" ClassName="ProviderWebPart" %>
<%@ Implements Interface="IMessage" %>
<script runat="server">
[ConnectionProvider("Message")]
public IMessage GetMessage()
{
return this;
}
public string Message
{
get
{
return _messageTextBox.Text;
}
}
</script>
<asp:TextBox Runat="server" ID="_messageTextBox" />
<asp:Button Runat="server" ID="_postBackButton" Text="Change the Text" />
5:建立Consumer WebPart。
这个是用来使用消息的webpart。也是使用的一个UserControl。
右击website,新建名为ConsumerWebPart.ascx 的一个UserControl
这里面有一个具有ConnectionConsumer属性的方法,用来通讯。在他的OnPreRender事件里显示结果(因为这个这个事件触发的时候系统应该已经完成通讯了)
代码如下:
<%@ Control Language="C#" ClassName="ConsumerWebPart" %>
<script runat="server">
private IMessage _message;
[ConnectionConsumer("Message")]
public void SetMessage(IMessage message)
{
this._message = message;
}
protected override void OnPreRender(EventArgs e)
{
if (_message != null)
_messageLabel.Text = _message.Message;
base.OnPreRender(e);
}
</script>
<asp:Label Runat="server" ID="_messageLabel" />
这个ConnectionConsumer属性就是一个receiver。
6:建立测试页面
创建一个aspx页面(我直接使用的default.aspx页面)
放置一个WebPartManager控件,编辑StaticConnections属性,添加一个connection,设置ID="SampleConnection" ConsumerID="ConsumerWebPart1" ProviderID="ProviderWebPart1" />。
然后放置一个WebPartZone 控件,向里面拖入刚才创建的两个UserControl(也就是webpart了)。
结果代码如下:
<%@ Page Language="C#" %>
<%@ Register TagPrefix="uc1" TagName="ProviderWebPart" Src="ProviderWebPart.ascx" %>
<%@ Register TagPrefix="uc2" TagName="ConsumerWebPart" Src="ConsumerWebPart.ascx" %>
<html>
<head>
<title>Sample Page</title>
</head>
<body>
<form id="form1" runat="server">
<asp:WebPartManager ID="WebPartManager1" Runat="server">
<StaticConnections>
<asp:WebPartConnection ID="SampleConnection" ConsumerID="ConsumerWebPart1" ProviderID="ProviderWebPart1"/> </StaticConnections>
</asp:WebPartManager>
<asp:WebPartZone ID="WebPartZone1" Runat="server">
<ZoneTemplate>
<uc1:ProviderWebPart Runat="server" ID="ProviderWebPart1" />
<uc2:ConsumerWebPart Runat="server" ID="ConsumerWebPart1" />
</ZoneTemplate>
</asp:WebPartZone>
</form>
</body>
</html>
7:运行。
这样一个webparts之间的一个简单通讯就做完了。我在学习webparts之间老是爱以“webparts”为关键字搜索,可是昨天无意用了一下“web part ”为关键字,又搜到很多的文章。对于想学webparts人有所帮助,不要像我学习webparts中,像个无并头的苍蝇,乱撞。