2007年8月9日 星期四

讓 label 也能觸發 click 事件

當我們開啟檢視原始碼時可以發現,所有的Web控制項都是透過網頁上的同一個doPostBack含式來處理PostBack動作,
而該函式利用「eventTarget」參數,來判斷引發該PostBack動作的是哪一個Web控制項,此外透過「eventArgument」
傳入其他額外的參數。
private void Page_Load(object sender, System.EventArgs e)
{
lbcal.Attributes["OnClick"]= this.GetPostBackEventReference(this.Button3);

if(Request.Form["__EVENTTARGET"]==Button3.UniqueID)
UserDefineEvent();

btnNewWindow.Attributes["OnClick"]="window.open('http://www.kimo.com.tw')";
}

private void UserDefineEvent()
{
Response.Write("I got it!");
}
我們首先定義了一個label物件叫做 lbcal,然後透過lbcal.Attributes["OnClick"]去實作觸發OnClick時的事件。
另外,GetPostBackEventReference( )是用來告知這次的PostBack是由那個物件所觸發的。在範例中,我們指定按下
lbcal標籤時,告知系統這是Button3所觸發的(當然,我們也可以用this.lbcal來代替,只是現在是用"借刀殺人")。

在Page_Load事件中,我們還有透過Request.Form["__EVENTTARGET"]來抓取到底是誰觸發這次PostBack的資訊。

1 則留言:

  1. 感謝您所分享的文章,不過我還有點疑問
    如果今天我要lbcal不只可以window.open的動作呢
    例如是Datasource或Gridview等
    ( 假設有lbcal2.lbcal3分別也做不同功能 )
    是不是也需要每一個lbcal都給它通通各給一次onclick事件?
    如果大大能撥空回答,必感謝萬分!~
    祝 一切順心

    回覆刪除