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

时间:2013-03-22 04:03:39

标签: javascript asp.net

我正在使用here找到的增量页面加载模式。

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

1 个答案:

答案 0 :(得分:0)

ScriptManager.RegisterStartupScript(blah, blah)订阅活动$(document).ready(),因此它不会适用于您的情况(当您的第二个视图加载时,文档已准备就绪)。您应该在加载第二个视图的ajax调用中成功调用htat Javascript。

<强>更新

尝试将js函数calldisplaymap()添加到aspx页面,而不是在codebehind中注册它。并使用: 辅助页面(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");
            }
        }
    }