• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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之间进行。但是当页面第一次加载的时候,也就是页面加载好过分下拉框没有被点击之前,这里是没有值传递的。

    上一篇:.net下调用sqlserver存储过程的小例子
    下一篇:WEB在模态窗体里导出或下载文件功能代码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    ASP.NET UserControl 通信的具体实现 ASP.NET,UserControl,通信,的,