gpt4 book ai didi

ASP.NET UserControl 通信的具体实现

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章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代码如下:

复制代码代码如下:

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之间进行。但是当页面第一次加载的时候,也就是页面加载好过分下拉框没有被点击之前,这里是没有值传递的.

  。

最后此篇关于ASP.NET UserControl 通信的具体实现的文章就讲到这里了,如果你想了解更多关于ASP.NET UserControl 通信的具体实现的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com