2013-03-22 86 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