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)subscribe event $(document).ready(),因此它不适用于您的情况(当您的第二个视图加载时,文档已准备好)。您应该在加载第二个视图的 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 回答