Asp.net2.0 - WebParts学习笔记(2):WebPart 之间进行静态通讯的完整示例(附源码)

简介:

上一篇介绍了Web Parts基础,如果两个Web Part之间不能通讯,那就相当郁闷的,所以Asp.Net提供了两种方式来使得Web Part之间可以互相通讯,一种是静态通讯方式,另一种时使用ConnectionZone进行动态通讯。(这里所谓的“Web Part通讯”是指多个WebPart中用户控件之间的通讯)。下面是Web Parts直接进行通讯的模型:


    我在学习过程中,通过实例--根据我的Blog的RSS来搜索文章--来演示Web Part之间的静态通讯。运行结果如下所示(没有进行界面美化^_^):
起始页面:


    以"struct"作为关键字搜索的结果页面:


    页面中放了两个Web Part,第一个WebPart中包含一个由文本框和按钮组成的用户控件Search(这里用的是用户控件,而不是直接在WebPart放置文本框和按钮,如果直接放的话每个控件都有个标题条TitleBar,感觉太别扭);第二个WebPart中负责显示搜索结果,也是包含一个用户控件Content,Content控件包含0个或多个动态添加的Label。下面是设计Web Parts间进行通讯的步骤:

1. 创建消息接口:定义一个IMessage接口

1 public   interface  IKeyWord
2 {
3 string Messageget;}
4}

 

2. 通讯提供者(Provider):
     这个示例中,第一个WebPart中的用户控件Search作为通讯提供者,因此我们定义Search控件的代码如下:

 1 public  partial  class  Search : System.Web.UI.UserControl,IKeyWord // 继承通讯接口IKeyWord
 2 {
 3    protected void Page_Load(object sender, EventArgs e)
 4    {
 5    }

 6
 7    /*通讯提供者,实现方法返回消息接口,并且方法上要运用特性[ConnectionProvider],第二个参数用作在WebPartManager中注册*/
 8    [ConnectionProvider("KeyWord""KeyWordProvider")]
 9    public IKeyWord KeyWordProvide()
10    {
11        return this;
12    }

13
14    IKeyWord 成员
20}

21
22




3. 通讯订阅者(Consumer):
     这个示例中,第而个WebPart中的用户控件Content作为消息订阅者,因此我们定义该控件的代码如下:

 1 public  partial  class  Content : System.Web.UI.UserControl
 2 {    
 3    protected void Page_Load(object sender, EventArgs e)
 4    {
 5    }

 6
 7    [ConnectionConsumer("KeyWord","KeywordConsumer")]
 8    public void GetKeyWord(IKeyWord keyword)
 9    {
10        ProcessRSSItem(keyword.Message);
11    }

12
13    //解析RSS,并显示解析结果
14    public void ProcessRSSItem(string keyword)
15    {
16        System.Xml.XmlDocument rssDoc = new System.Xml.XmlDocument();
17        rssDoc.Load(Server.MapPath("source.xml"));
18        System.Xml.XmlNodeList rssItems = rssDoc.SelectNodes("rss/channel/item");
19
20        string title = "";
21        string link = "";
22        string description = "";
23
24        for (int i = 0; i < rssItems.Count; i++)
25        {
26            System.Xml.XmlNode rssDetail;
27
28            //读取标题
29            rssDetail = rssItems.Item(i).SelectSingleNode("title");
30            if (rssDetail != null)
31                title = rssDetail.InnerText;
32            else
33                title = "";
34
35            //如果不包括keyword关键字,则跳转到下一条记录
36            if (!String.IsNullOrEmpty(keyword) && (title.IndexOf(keyword) == -1))
37                continue;
38
39            //读取URL
40            rssDetail = rssItems.Item(i).SelectSingleNode("link");
41            if (rssDetail != null)
42                link = rssDetail.InnerText;
43            else
44                link = "";
45
46            //读取描述信息
47            rssDetail = rssItems.Item(i).SelectSingleNode("description");
48            if (rssDetail != null)
49                description = rssDetail.InnerText;
50            else
51                description = "";
52
53            //输出            
54            Label label = new Label();
55            label.Text = "<p><b><a href='" + link + "' target='new'>" + title + "</a></b><br/>" + description + "</p>";
56            this.Controls.Add(label);
57        }

58    }

59}

60
61



4. 在页面*.aspx的WebPartManager中注册提供者和订阅者:

1 < asp:WebPartManager ID = " wpManager "  runat = " server " >
2       < StaticConnections >
3           < asp:WebPartConnection ID = " KeywordConnection "
4              ProviderID = " search "  ProviderConnectionPointID = " KeyWordProvider "
5              ConsumerID = " content "  ConsumerConnectionPointID = " KeywordConsumer " >
6           </ asp:WebPartConnection >
7       </ StaticConnections >
8 </ asp:WebPartManager >

 


附:完整源码下载http://files.cnblogs.com/happyhippy/WebPartDemo.rar

本文转自Silent Void博客园博客,原文链接:http://www.cnblogs.com/happyhippy/archive/2007/04/14/713136.html ,如需转载请自行联系原作者
相关文章
|
7月前
|
存储 开发框架 前端开发
前端框架EXT.NET Dotnet 3.5开发的实验室信息管理系统(LIMS)成品源码 B/S架构
发展历史:实验室信息管理系统(LIMS),就是指通过计算机网络技术对实验的各种信息进行管理的计算机软、硬件系统。也就是将计算机网络技术与现代的管理思想有机结合,利用数据处理技术、海量数据存储技术、宽带传输网络技术、自动化仪器分析技术,来对实验室的信息管理和质量控制等进行全方位管理的计算机软、硬件系统,以满足实验室管理上的各种目标(计划、控制、执行)。
68 1
|
4月前
|
API
【Azure 媒体服务】Media Service的编码示例 -- 创建缩略图子画面的.NET代码调试问题
【Azure 媒体服务】Media Service的编码示例 -- 创建缩略图子画面的.NET代码调试问题
|
4月前
|
XML API 图形学
【Azure Developer】.Net 简单示例 "文字动图显示" Typing to SVG
【Azure Developer】.Net 简单示例 "文字动图显示" Typing to SVG
【Azure Developer】.Net 简单示例 "文字动图显示" Typing to SVG
|
6月前
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
83 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
6月前
|
Web App开发 开发框架 .NET
ASP淘特二手房房地产系统源码
ASP淘特二手房房地产系统源码主要提供了房屋信息出售、出租、求购、求租、合租等信息的发布平台。 本系统已提供成熟的赢利模式,通过向中介会员提供发布信息平台收取会员费为网站的主要收入来源,中介会员申请开通后,可以添加经济人和管理中介公司所属的房源信息。可在线续费购买服务期(支付宝接口)、购买置顶等。
67 2
|
5月前
|
C#
效率提升利器:一个在线的.NET源码查询网站
效率提升利器:一个在线的.NET源码查询网站
|
6月前
|
XML API 图形学
.Net 简单示例 "文字动图显示" Typing to SVG “
该文描述了一个.NET API的实现过程,该API能将输入的文字转换成SVG动态图。首先,作者展示了示例网站(&lt;https://readme-typing-svg.demolab.com/&gt;)的功能,它能将文字转化为可自定义样式的SVG动画。接着分析了示例URL的响应,发现其内容类型为`image/svg+xml`,主要由SVG、path、animate和text元素组成。通过创建一个.NET Core Web API项目,作者设置了响应内容类型为`image/svg+xml`,并将示例URL的SVG内容直接输出,成功实现了相同效果。
|
6月前
|
SQL 机器学习/深度学习 缓存
心得经验总结:深入Dapper.NET源码(文长)
心得经验总结:深入Dapper.NET源码(文长)
86 0
|
7月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
81 0
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
43 7
下一篇
无影云桌面