TIPS-Call Javascript function after UpdatePanel postback

我希望UpdatePanel中的Button在觸發非同步的Postback後,除了更新Update Panel中Label的值,還可以觸發一段Javascript,呼叫前端的Javascript Function。試了幾種方法都失敗了!

1) Response.Write想當然不Work,因為ASPX網頁並沒有重新Render。
2) 加了一個Literal在UpdatePanel中,設定Literal1.Text="<script>blah();</script>"。用Fiddler看到這段內容被傳回來了,但我猜UpdatePanel是用置換InnerHTML的方式動態更新UpdatePanel的內容,所以其中的Javascript並沒有被執行。
3) Google了一下,有些人建議用Page.RegisterStartupScript來做。我有點懷疑它的原理,不過既然有人說Work,我就試試。最後證實這招也不管用,或許Atlas到ASP.NET AJAX間做了什麼大改。

最後,找到一篇文件,作者跟我一樣搞不出RegisterStartupScript的把戲,所以改用
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(blah);
的方式,加掛endRequest事件以呼叫自訂的Javascript Function。Ya, it works!

只是此招每次非同步呼叫後都會被觸發,要用一些技巧去區別後端處理邏輯為何並依執行結果做不同的處理。(最簡單的方法是將資料放在TextBox中,前端用$get("txtName").value就可輕鬆取回)

Published 18 April 2007 06:58 PM 由 Jeffrey
Filed under: ,


意見

# 小咪 said on 15 May, 2007 04:05 AM

使用您的方法..在後端指定 txtName.text ="hello"

但是 到前端後..它的值依然為空白.

# Jeffrey said on 15 May, 2007 09:21 AM

先確認TextBox有被包在UpdatePenel中,才會被動態更新。

我想可以先做一個測試,在UpdatePanel中放一個Button,由它來觸發更新(這是最標準的做法),確定在這種狀況下可以動態更新,再來測試用Javascript觸發的方法。

如果還是找不出問題,可以到討論區(看關於作者)把你的Code貼上來,我再幫忙看看。

# 丫米 said on 06 December, 2007 01:04 AM

由於看了您的提示,但毫無概念的我,還是測試失敗,

可否提供簡易範例,以供參考呢?

# 丫米 said on 06 December, 2007 01:06 AM

看過您所提示的相關資訊,還是測試失敗,

可否拜託您提供簡易的範例呢?

# Jeffrey said on 07 December, 2007 09:17 AM

To 丫米, 送你一個Sample, 接好囉!

# Ammon said on 07 December, 2007 11:57 PM

改用 ScriptManager.RegisterStartupScript 就可以了

另外要注意 Control 參數是要有update的control才行

不能通通用 page

# Jeffrey said on 08 December, 2007 01:22 AM

To Ammon大, 領教了! 已將你的好方法收納入Post中!

# XBaby said on 02 March, 2008 04:16 PM

可以試試下面的作法..... ^o^y

參考參考

///-----------------------------------------------------------

/// <summary>

/// 直接執行頁面寫好的 JavaScript

/// </summary>

/// <param name="cCmd">要執行的指令</param>

public static void RunJavaScript(Page oPage, string cCmd)

{

    string js = "";

    js = "<script type='text/javascript'>" + cCmd + "</script>";

    // GetRndString() 是自己寫的亂數字串函數,可以改成隨便一個字串就好了

    ScriptManager.RegisterClientScriptBlock(oPage, js.GetType(), GetRndString(), js, false);

}

使用時:

RunJavaScript(this, "ShowMessage1();");

# Penny Yip said on 29 July, 2008 07:39 PM

You can also try using

ClientScript.RegisterStartupScript

and in the JavaScript, use the

Sys.Application.add_load( function() {    //JS here; });

And the JS inside the block will be executed everytime the page is posted back

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 

請輸入以上的數字:

搜尋

Go

<April 2007>
SunMonTueWedThuFriSat
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345
 
RSS
【工商服務】
最新回應


BlogLook Score and Rank

Syndication