ASP.Net增量页面加载调用Javascript

ASP.Net incremental page load call Javascript

本文关键字:加载 调用 Javascript Net ASP      更新时间:2023-09-26

我使用的是这里发现的增量页面加载模式。

我有一个加载并显示转轮指示器的主页面,并调用另一个辅助页面。该页面在主页中显示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);
}

ScriptManager.RegisterStartupScript(blah, blah)订阅事件$(document).ready(),所以它不会在你的情况下工作(当你的第二个视图加载,文档准备就绪)。当ajax调用成功后,你应该调用这段Javascript代码来加载第二个视图。

尝试将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");
            }
        }
    }