2011-08-23 111 views
3

我想了解如何在更新面板更新完成更新給定的各種約束後運行客戶端JavaScript。我的發展方案不是微不足道的,但我想通過描述一個更簡單的案例來說明問題。如何在更新面板更新後運行Javascript?

我有一個用戶控件包含更新面板,其中包含一個按鈕和一個表。當用戶單擊該按鈕時發生異步回發,該表的行將被更改,並且已更改的表將被返回並呈現在客戶端上。

我想運行一個腳本在表上執行一些自定義格式。讓我們說現在我想斑馬條紋表。 (實際需求比較複雜)。

我以爲我會簡單地發出腳本作爲用戶控件輸出的一部分,並且每當發生更新時表格標記和腳本將在客戶端上處理並且一切都會好起來的,但是該技術不起作用。

我見過其他引用ClientScriptManager的帖子,但似乎沒有在我的用戶控件中可用。我應該添加一個ScriptManagerProxy嗎?

那麼考慮到約束條件,最好的方法是什麼?

  • 更新面板位於用戶控件中。
  • 頁面上可能有多個用戶控件實例。

看起來我需要

  • 爲用戶生成控制的一個惟一的更新腳本。
  • 找到一種方法來「註冊」每個腳本
  • 找到一種方法來要求腳本在相應的updatePanel完成更新時運行。

我似乎已經看到很多很接近但沒有符合我的情況的例子;我無法弄清楚如何把它們全部結合在一起。

回答

1

你將不得不爲它編寫EndRequestHandler。 這是一個非常常見的問題,Javascript,Jquery在更新面板異步回傳後停止工作。 在這個鏈接我已經解釋瞭如何做到這一點。 http://codethatworkedforme.blogspot.com/2011/08/having-issues-with-update-panel.html

+0

不得不使用類似的技術到做我在「codethatworkedforme」文章中,就像我曾經把用戶界面元素包裝在用戶控件中一樣,RegisterStartupScript本身還不夠。 – IanT8

0
  • 爲用戶控件的一個惟一的更新腳本,你可以試試這個

    function yourFunctionName<%= ClientID %>() { 
        //do something 
    } 
    
  • 可以使用調用客戶端腳本按鈕客戶envent處理器在服務器端這

    protected void btn_click(object sende, EventArgs e) { 
        ScriptManager.RegisterStartupScript(this, this.GetType(), 
          Guid.NewGuid().ToString(), 
          string.Format("yourFunctionName{0}();", ClientID), 
          true); 
    } 
    
+0

調用RegisterStartupScript是否會導致註冊腳本的積累? – IanT8

+0

我正在試驗一些簡化的代碼;單頁面,單個更新面板,沒有用戶控制,內嵌腳本等。似乎在IE8中工作,但不是Firefox 6. Wierd。在Firefox 6中,ajax部分有效,但腳本沒有被解僱。奇怪的。 – IanT8

+0

將代碼從主頁面移動到用戶控件時不起作用。仍在調查。 – IanT8