2013-03-22 4 views
0

Я использую инкрементный шаблон загрузки страницы, найденный here.ASP.Net инкрементный вызов загрузки страницы Javascript

У меня есть основная страница, которая загружает и отображает индикатор вращающегося колеса и вызывает другую дополнительную страницу. Эта страница отображает HTML на главной странице просто отлично. Однако мне нужна часть javascript для запуска, которая создается вторичной страницей через ScriptManager.RegisterStartupScript(blah, blah);.

Я вижу скрипт сценария, созданный сценарием, в нижней части HTML, введенного вторичной страницей, но он не выполняется. Когда я делаю запрос на вторичную страницу напрямую, Javascript работает просто отлично. Я даже попробовал обернуть введенный скрипт в функцию и вызвать эту функцию с основной страницы, но основная страница говорит, что функция не определена.

Edit: вот основной код страницы:

<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(), так что это будет не работает в вашем случае (если ваш второй вид загрузки , документ уже готов). Вы должны вызвать htat часть Javascript для успеха в вызове ajax, который загружает ваше второе представление.

Update

Попробуйте добавить функцию 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? –

+0

Если вы покажете свой код, я дам вам рабочий пример –

+0

Спасибо, я отредактировал исходное сообщение, чтобы показать код –

Смежные вопросы