2007年8月9日 星期四

執行JavaScript與PostBack的順序

在ASP.NET高階技巧與控制項實作一書,看到一句話,「我們所看到的前端、後端,其實所有後端都是用前端模擬出來的結果」。實際上都會
轉換成我們在網頁檢視原始碼時所看到的結果是一樣的。這句話應該要銘記在心,蠻受用的。於是我們都可以透過JavaScript來完成要求,
只是看你功力夠不夠高,想不想寫的複雜一點。
我先分析一下,使用:
Button1.Attributes["OnClick"] 與
this.RegisterStartupScript("s",scriptString); 這兩種區別。
如果我們使用的 Button1 是一個Server Control,不管我們在Button1.Attributes["OnClick"]後面接什麼,最後都會再執行一次PostBack。
因為這個宿命已經在 event-handle就決定了。所以我們在 ["OnClick"]後面所接的JavaScript指令會優先被執行。
但是如果我們採用 this.RegisterStartupScript("s",scriptString); 方式,則會先執行我們Server Control的觸發事件裡面的動作,
最後再執行RegisterStartupScript裡面的JavaScript。
所以簡單說,這兩個用法的差別,就是執行順序不同。
然而,如果你要產生 postback - run javascript -postback ,有可能嗎?
可以的,舉裡來說:
Button1.Attributes["OnClick"]=this.GetPostBackEventReference( btnAdd ) + ";alert('ggg');";
Button1是一個Server Control,根據上面的語法,會先觸發一個我們所自定的PostBack,然後再執行
JavaScript。最後,因為他本身是一個Server Control,所以還會在觸發一次他自己的PostBack。
注意,這裡的JavaScript語法前面有加個";" ,主要是為了區別上一個PostBack所產生的語法。

沒有留言:

張貼留言