【问题标题】:ASP.Net incremental page load call JavascriptASP.Net 增量页面加载调用 Javascript
【发布时间】:2014-02-25 03:41:14
【问题描述】:

我正在使用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);
}

【问题讨论】:

    标签: javascript asp.net


    【解决方案1】:

    ScriptManager.RegisterStartupScript(blah, blah) 订阅事件$(document).ready(),因此它不适用于您的情况(当您的第二个视图加载时,文档已准备就绪)。您应该在加载第二个视图的 ajax 调用中成功调用 htat 一段 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");
                }
            }
        }     
    

    【讨论】:

    • 谢谢,你能举个例子吗?
    • 我必须从后面的代码中注册它,以便它从会话中获取 lat long
    • 你也可以从 aspx 页面的 session 中获取:
    • 函数调用displaymap() { displaymap(, ); };
    • 是的,calldisplaymap 没有定义
    猜你喜欢
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    相关资源
    最近更新 更多