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 None.gif public   interface  IKeyWord
2 ExpandedBlockStart.gif {
3ExpandedSubBlockStart.gif string Messageget;}
4ExpandedBlockEnd.gif}

 

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

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

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

13InBlock.gif
14ContractedSubBlock.gif    IKeyWord 成员
20ExpandedBlockEnd.gif}

21 None.gif
22 None.gif




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

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

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

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

58ExpandedSubBlockEnd.gif    }

59ExpandedBlockEnd.gif}

60 None.gif
61 None.gif



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

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

 


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

本文转自Silent Void博客园博客,原文链接:http://www.cnblogs.com/happyhippy/archive/2007/04/14/713136.html ,如需转载请自行联系原作者
相关文章
|
2月前
|
开发框架 .NET BI
ASP.NET公立医院健康体检信息管理系统源码
健康体检信息管理系统是专门针对医院体检中心的日常业务运作的特点和流程,结合数字化医院建设要求进行设计研发的一套应用系统。该系统覆盖体检中心的所有业务,完成从预约、登记、收费、检查、检验、出报告、分析、报表等所有工作,规范了体检流程,提高了工作效率。体检系统为每个体检者建立一套完整的体检档案,与病人的门诊、住院诊疗信息有机集成, 真正体现数字化医院以病人为中心的建设原则。
68 1
|
2月前
|
开发框架 安全 .NET
ASP.NET三甲医院手术麻醉信息管理系统源码 对接麻醉机、监护仪、血气分析仪
辅助医院建设 •支持三级医院评级需求 •支持智慧医院评级需求 •支持互联互通评级需求 •支持电子病历评级需求
38 0
|
1月前
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
43 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
1月前
|
Web App开发 开发框架 .NET
ASP淘特二手房房地产系统源码
ASP淘特二手房房地产系统源码主要提供了房屋信息出售、出租、求购、求租、合租等信息的发布平台。 本系统已提供成熟的赢利模式,通过向中介会员提供发布信息平台收取会员费为网站的主要收入来源,中介会员申请开通后,可以添加经济人和管理中介公司所属的房源信息。可在线续费购买服务期(支付宝接口)、购买置顶等。
27 2
|
2月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
47 0
|
2月前
|
开发框架 前端开发 .NET
ASP.NET云LIS区域检验云SaaS平台源码
云LIS区域检验平台由BS架构组成。统一接入区域内全部的检验数据,通过检验云,实现区域内检验信息数据共享,通过区域质控模块,对各个分支机构产生的报告进行质控,从而实现检验结果互认。同时,对各医疗机构上传的样本检验数据进行统一管理。
66 1
ASP.NET云LIS区域检验云SaaS平台源码
|
2月前
|
开发框架 搜索推荐 .NET
ASP.NET体检中心源码,实现检前、检中、检后全流程管理
健康体检系统遵循整个健康体检的实际流程,以提高工作效率、降低错检、防止漏检提高人性化服务水平为目的,在体检过程中可以高效、自动化、人性化的处理数据与提供服务。针对体检流程中工作强度在时间分配上不均匀等特点,解决了体检信息处理效率问题,在不增加体检中心人力资源投入或少投入的基础上,提升信息处理的效率,从而突破体检中心日处理体检人数的上限,为体检中心创造更大经济效益的同时,还能有效的降低体检工作者的劳动强度。
66 5
|
2月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
118 0
|
2月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
184 5
|
2月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界