最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

ASP.NET UserControl 通信的具体实现

来源:懂视网 责编:小采 时间:2020-11-27 22:40:59
文档

ASP.NET UserControl 通信的具体实现

ASP.NET UserControl 通信的具体实现:最近在SharePoint2007中用到了WebPart通信技术,个人觉得2007版本里面的ConnectionConsumer和ConnectionProvider没有2010版本那么好用,于是换了一种思想去实现通信:WebPart容器中装一个UserControl控件,这样只要UserControl可以通信
推荐度:
导读ASP.NET UserControl 通信的具体实现:最近在SharePoint2007中用到了WebPart通信技术,个人觉得2007版本里面的ConnectionConsumer和ConnectionProvider没有2010版本那么好用,于是换了一种思想去实现通信:WebPart容器中装一个UserControl控件,这样只要UserControl可以通信

最近在SharePoint2007中用到了WebPart通信技术,个人觉得2007版本里面的ConnectionConsumer和ConnectionProvider没有2010版本那么好用,于是换了一种思想去实现通信:WebPart容器中装一个UserControl控件,这样只要UserControl可以通信,就实现了WebPart之间通信。

UserControl是用户自定义控件,我们可以在UserControl中注入事件,当一个UserControl触发某种事件,然后通过事件参数来传递数据,让其他UserControl获得这个事件传递过来的参数,实现通信。

下面简单演示一下两个UserControl进行通信

 

创建好一个类,两个UserControl和一个web页面。

这里分别是MyEventAgrs.cs,UCProvider.ascx,UCComsumer.ascx,Default.aspx。

MyEventAgrs.cs代码如下:
代码如下:
public delegate void MyEventHandle(object sender, MyEventAgrs args);
    public class MyEventAgrs : EventArgs
    {
        public MyEventAgrs() { }
        public string MyMsg { get; set; }
    }

public delegate void MyEventHandle(object sender, MyEventAgrs args);
    public class MyEventAgrs : EventArgs
    {
        public MyEventAgrs() { }
        public string MyMsg { get; set; }
    }

如果想传递其他对象时就只需要修改MyEventAgrs类的MyMsg方法。这里须继承EventArgs抽象类,用于存放事件参数值,另外需定义一个委托事件,然后在其他的地方使用。

 UCProvider.ascx代码如下:
代码如下:
 public partial class UCProvider : System.Web.UI.UserControl
    {
        public event MyEventHandle myHandle;
        protected void Page_Load(object sender, EventArgs e)
        {
            this.DropDownList1.SelectedIndexChanged += new EventHandler(DropDownList1_SelectedIndexChanged);
        }
        void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            MyEventAgrs myEvent = new MyEventAgrs();
            myEvent.MyMsg = DropDownList1.SelectedValue;
            myHandle(this, myEvent);
        }    }

public partial class UCProvider : System.Web.UI.UserControl
    {
        public event MyEventHandle myHandle;
        protected void Page_Load(object sender, EventArgs e)
        {
            this.DropDownList1.SelectedIndexChanged += new EventHandler(DropDownList1_SelectedIndexChanged);
        }
        void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            MyEventAgrs myEvent = new MyEventAgrs();
            myEvent.MyMsg = DropDownList1.SelectedValue;
            myHandle(this, myEvent);
        }    }

这里在前台页面中定义了一个DropDownList,并给DropDownList绑定了数据源,不再罗列前台页面。我想实现当用户选择DropDownList的时候将用户选择的DropDownList的值传递出去,代码里面用myHandle(this, myEvent)来初始化事件。

UCComsumer.ascx代码如下:
代码如下:
 public partial class UCComsumer : System.Web.UI.UserControl
    {
public void InitValue(string msg) {
            lb.Text = msg;
        }
}

public partial class UCComsumer : System.Web.UI.UserControl
    {
public void InitValue(string msg) {
            lb.Text = msg;
        }
}

这里赋值的时候也可以用属性来表示,比如:
代码如下:
  public string UC1Msg
        {
            get{return this.lb.Text;}
            set{this.lb.Text=value;}
        }

public string UC1Msg
        {
            get{return this.lb.Text;}
            set{this.lb.Text=value;}
        }

如果用这种方式,在引用UserControl的时候就更加方便了:
代码如下:
<uc2:ucConsumer runat="server" ID="uc2" UC1Msg="Defalut Value" />

<uc2:ucConsumer runat="server" ID="uc2" UC1Msg="Defalut Value" />

Default.aspx代码如下:

前台页面里面需要注册UserControl
代码如下:
<%@ Register TagPrefix="uc1" TagName="ucProvider" Src="~/UserControls/UCProvider.ascx" %>
<%@ Register TagPrefix="uc2" TagName="ucConsumer" Src="~/UserControls/UCComsumer.ascx" %>

<%@ Register TagPrefix="uc1" TagName="ucProvider" Src="~/UserControls/UCProvider.ascx" %>
<%@ Register TagPrefix="uc2" TagName="ucConsumer" Src="~/UserControls/UCComsumer.ascx" %>

再引用

代码如下:
<uc1:ucProvider runat="server" ID="uc1" OnmyHandle="uc1_myHandle" />
<uc2:ucConsumer runat="server" ID="uc2" />

<uc1:ucProvider runat="server" ID="uc1" OnmyHandle="uc1_myHandle" />
<uc2:ucConsumer runat="server" ID="uc2" />

后台页面:
代码如下:
protected void uc1_myHandle(object sender, MyEventAgrs args)
        {
            if (args != null)
            {
                uc2.InitValue(args.MyMsg);
            }
            else
                uc2.UC1Msg = string.Empty;
        }

protected void uc1_myHandle(object sender, MyEventAgrs args)
        {
            if (args != null)
            {
                uc2.InitValue(args.MyMsg);
            }
            else
                uc2.UC1Msg = string.Empty;
        }

这样就完成了整个过程。Default.aspx页面仅仅是一个载体或者是中间介质,所有的操作都是在两个UserControl之间进行。但是当页面第一次加载的时候,也就是页面加载好过分下拉框没有被点击之前,这里是没有值传递的。

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

ASP.NET UserControl 通信的具体实现

ASP.NET UserControl 通信的具体实现:最近在SharePoint2007中用到了WebPart通信技术,个人觉得2007版本里面的ConnectionConsumer和ConnectionProvider没有2010版本那么好用,于是换了一种思想去实现通信:WebPart容器中装一个UserControl控件,这样只要UserControl可以通信
推荐度:
标签: 通讯 实现 通信
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top