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裏。

      

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

發佈了43 篇原創文章 · 獲贊 3 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章