aspx页面与UserControl之间的通讯

页面内如果includeUserControl的话,页面与UserControl的通讯是开发过程中不可避免的问题。

因为asp.net中,页面的加载顺序是:

1         aspx页面的Page_Load

2         userControlPage_Load

 

所以页面传递参数给userControl可以将变量存放在SESSION中。

所以关键是UserControl如何将信息传递给页面。

 

有两种实现方式:

1)      aspx页面中加一个load函数,当页面onload事件发生时调用。load函数解析HTML DOM,得到UserControl中的元素的value,这个value的值可以由UserControl来控制。

function load()

    {

        var divContent = document.getElementById('divContent');       

        elements = divContent.getElementsByTagName("span");

        var str = "";

       

        for(var p in elements){

           

            str = ""+elements[p].innerHTML;

            if( str.indexOf("IsChkSucc") > 0 ){

                var leftpad = str.indexOf("value");

                var value_IsChkSucc = str.substr(leftpad+6,3);

               

                //alert(value_IsChkSucc);

                if(value_IsChkSucc == "SUC"){

                    document.getElementById('btnUp').style.display='';

                }

                else if(value_IsChkSucc == "ERR"){

                    document.getElementById('btnUp').style.display='none';

                }

               

            }

        }

}

 

2)      使用自定义事件

public delegate void MessageNotifiedEventHandler(Object sender, UserEvent.UserControlEventArgs e);

public partial class UserControls_UploadFile : UserControls_BaseUpload

{

   

public event MessageNotifiedEventHandler MessageNotified;

protected void btnUpload_Click(object sender, EventArgs e)

    {

 

//taskA

if (MessageNotified != null)

                {

            // UserControlEventArgs是一个继承EventArgs有类        

UserControlEventArgs ucEventArgs = new UserControlEventArgs();

                    ucEventArgs.fileName = strFilePath;

                    ucEventArgs.checkErr = (failCnt > 0);

                    ucEventArgs.rowFieldNum = rowFieldNum;

                    MessageNotified(this, ucEventArgs);

                }

 

}

 

// taskC

 

}

 

在页面的Page_Load中订阅这个事件。

upload.MessageNotified += new MessageNotifiedEventHandler(upload_MessageNotified);

 

private void upload_MessageNotified(object sender, UserControlEventArgs e)

    {

        try

        {

    // taskB

           

        }

        catch (Exception ex)

        {

            AlertExceptionMessage(ex);

        }

        finally

        {

            ExcuteJsFinally();

        }       

    }

 

上述代码的执行顺序是:

页面Page_Load(含订阅事件代码),UC Page_Load, UC处理点击事件,UC抛出自定义事件,页面处理订阅事件,UC继续执行点击事件后续处理,传递给页面的参数被定义在UserControlEventArgs里。

      

       第一种是被动的接收信息,第二种是有交互的通信.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值