2013-03-22 67 views
0

我正在使用增量頁面加載模式找到hereASP.Net增量頁面加載調用Javascript

我有一個主頁加載並顯示一個轉輪指示器,並調用另一個輔助頁面。該頁面在主頁面中顯示HTML很好。不過,我需要通過ScriptManager.RegisterStartupScript(blah, blah);由輔助頁面生成的一段JavaScript運行。

我在由輔助頁面注入的HTML底部看到腳本管理器生成的腳本,但它不執行。當我直接向輔助頁面發送請求時,Javascript運行得很好。我甚至嘗試過在一個函數中包裝注入的腳本,並從主頁面調用該函數,但主頁面顯示該函數未定義。

編輯:這裏的主要網頁代碼:

<script language="javascript" type="text/javascript"> 
    var slat; 
    var slong; 
    function check() {   
     if (navigator.geolocation) {     
      navigator.geolocation.getCurrentPosition(function (position) {      
       // PageMethods.SetSession(position.coords.latitude, position.coords.longitude); 
       slat = position.coords.latitude; 
       slong = position.coords.longitude; 
       callEventsService(position.coords.latitude, position.coords.longitude); 
      }); 
     } 
    } 
    function callEventsService(lat, slong) { 
     var progress = $get('progress'); 
     progress.style.display = '';  
     PageMethods.SetSession(lat, slong, eventsCallback); 
    } 
    function eventsCallback(result) { 
     var progress = $get('progress'); 
     progress.style.display = 'none'; 
     GetWebRequest('IncrementalEvent.aspx') 
    }  
    function GetWebRequest(getPage) {   
     var wRequest = new Sys.Net.WebRequest(); 
     wRequest.set_url(getPage); 
     wRequest.set_httpVerb("GET"); 
     wRequest.set_userContext("user's context"); 
     wRequest.add_completed(OnWebRequestCompleted) 
     wRequest.invoke(); 
    } 
    function OnWebRequestCompleted(executor, eventArgs) { 
     if (executor.get_responseAvailable()) { 
      var grid = document.getElementById("grid"); 
      grid.innerHTML += executor.get_responseData(); 
      //calldisplaymap(); <-- DOESNT WORK, Function not defined   
     } 
     else { 
      if (executor.get_timedOut()) { 
       alert("Timed Out"); 
      } 
      else { 
       if (executor.get_aborted()) 
        alert("Aborted"); 
      } 
     } 
    }   
</script> 

這裏的二級頁面加載

protected void Page_Load(object sender, EventArgs e) 
{ 
    List<GenericEvent> ge = (List<GenericEvent>)Session["publicevents"]; 
    lvevents.DataSource = ge; 
    lvevents.DataBind(); 
    ExtractEventsToMap(ge);  
} 
    protected void ExtractEventsToMap(List<GenericEvent> lEvents) 
{ 
    ...........<stuff>........ 
    ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "PointArrays", sb.ToString(), true); 
    ScriptManager.RegisterStartupScript(this, this.GetType(), "showmap", "function calldisplaymap(){displaymap(" + Session["lat"].ToString() + "," + Session["long"].ToString() + ")};", true); 
} 

回答

0

ScriptManager.RegisterStartupScript(blah, blah)訂閱事件$(document).ready(),所以它不會在你的情況下工作(當你的第二個觀點裝載,準備好文件準備好)。您應該在加載第二個視圖的ajax調用中成功調用htat塊。

更新

嘗試js函數calldisplaymap()添加到aspx頁面,而不是在隱藏代碼註冊它。用途: 二級頁面(ASPX):

<script type="text/javascript"> 
    function calldisplaymap() { 
     displaymap(<%: Session["lat"].ToString()%>, <%:Session["long"].ToString()%>); 
    }; 
</script> 

主要頁面

function OnWebRequestCompleted(executor, eventArgs) { 
     if (executor.get_responseAvailable()) { 
      var grid = document.getElementById("grid"); 
      grid.innerHTML += executor.get_responseData(); 
      calldisplaymap(); //i hope, it will work.  
     } 
     else { 
      if (executor.get_timedOut()) { 
       alert("Timed Out"); 
      } 
      else { 
       if (executor.get_aborted()) 
        alert("Aborted"); 
      } 
     } 
    }  
+0

謝謝,你有一個exapmle? – 2013-03-24 01:49:20

+0

如果你顯示你的代碼,我會給你工作的例子 – 2013-03-24 07:57:08

+0

謝謝,我編輯原始帖子來顯示代碼 – 2013-03-24 15:44:47