2011-03-16 57 views
2

我想在ASP.net用戶控件到一個aspx頁面時觸發一個Javascript調用。
該網站允許用戶添加用戶控件到頁面(類似於添加一個小部件等像谷歌部件一樣的頁面)。但是,當添加控件時,JavaScript不會觸發,只有當頁面刷新時纔會觸發javascript。如果下一次訪問該網站並且控制權仍然存在,則JavaScript也會觸發。當asp.net用戶控件加載時javascript不會觸發

是否需要使用RegisterClientScript方法在控制加載或OnPreRender事件上註冊呼叫(setAutoTimer())。

在用戶控制我有這在ASCX文件的開始:

<script language="javascript" type="text/javascript"> 
    $(document).ready(function() { 
     if ($("#alarmList").length) { 
      setAutoTimer(); 
      getData(); 
     } 
    }); 

    function setAutoTimer() { 
     setInterval(getData, 10000); 
    } 

    function getData() { 
     $.ajax({ 
      type: "POST", 
      url: "Service.asmx/getListData 
      data: "{'inverterid': '" + "1'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (msg) { 
       AjaxSucceeded(msg); 
      }, 
      error: AjaxFailed 
     }); 
    } 

    function AjaxSucceeded(result) { 
     $("#alarmList").empty(); 

     $("#alarmsListTemplate").tmpl(result.d) 
     .appendTo("#alarmList"); 
    } 

    function AjaxFailed(result) { 
     alert(result.status + ' ' + result.statusText); 
    } 
</script> 

回答

4

$(文件)。就緒(函數(){});將僅在完整回發發生後(DOM重新加載時)運行。我假設你通過另一個AJAX方法添加控件(在這種情況下,document.ready不會觸發,你可以使用AJAX框架事件pageLoad(sender,args),它會在回調和回發後觸發。所以..

function pageLoad(sender, args) { 
     if (args.get_isPartialLoad()) { 
      setAutoTimer(); 
      getData(); 
     } 
    } 
+0

謝謝你的提示。我覺得這已經幫助 – Jawahar 2011-03-16 19:33:37

+0

此。爲我工作得很好,但我希望javascript能夠在兩者之前工作在回調之後,我刪除了'if(args.get_isPartialLoad())',它的工作方式就像一個魅力一樣。謝謝,@bleeeah! – TrustedInSci 2013-07-25 13:19:43

0

你可以調用從添加小部件到頁面的JavaScript方法

function AjaxSucceeded(result) { 
    $("#alarmList").empty(); 

    $("#alarmsListTemplate").tmpl(result.d) 
    .appendTo("#alarmList"); 

    setAutoTimer(); 
} 
相關問題