源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

ASP.NET UserControl 通信的具体实现

  • 时间:2022-08-20 00:54 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:ASP.NET 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代码如下:
[u]复制代码[/u] 代码如下:
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代码如下:
[u]复制代码[/u] 代码如下:
 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代码如下:
[u]复制代码[/u] 代码如下:
 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;         } }
这里赋值的时候也可以用属性来表示,比如:
[u]复制代码[/u] 代码如下:
  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的时候就更加方便了:
[u]复制代码[/u] 代码如下:
<uc2:ucConsumer runat="server" ID="uc2" UC1Msg="Defalut Value" /> <uc2:ucConsumer runat="server" ID="uc2" UC1Msg="Defalut Value" />
Default.aspx代码如下: 前台页面里面需要注册UserControl
[u]复制代码[/u] 代码如下:
<%@ 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" %>
再引用
[u]复制代码[/u] 代码如下:
<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" />
后台页面:
[u]复制代码[/u] 代码如下:
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之间进行。但是当页面第一次加载的时候,也就是页面加载好过分下拉框没有被点击之前,这里是没有值传递的。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部