0

ここにある増分ページ読み込みパターンを使用しています

スピニングホイールインジケーターを読み込んで表示するプライマリページがあり、別のセカンダリページを呼び出します。そのページは、プライマリページにHTMLを適切に表示します。ただし、を介してセカンダリページによって生成されるJavaScriptを実行する必要がありますScriptManager.RegisterStartupScript(blah, blah);

セカンダリページによって挿入された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);
}
4

1 に答える 1

0

ScriptManager.RegisterStartupScript(blah, blah)イベントをサブスクライブ$(document).ready()するため、この場合は機能しません(2番目のビューが読み込まれると、ドキュメントはすべて準備ができています)。2番目のビューをロードするajax呼び出しが成功したら、JavaScriptの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");
            }
        }
    }     
于 2013-03-22T05:03:10.767 に答える