代码之家  ›  专栏  ›  技术社区  ›  James Helms

更新面板中的谷歌地图

  •  2
  • James Helms  · 技术社区  · 12 年前

    我有一个中继器,可以为谷歌地图输出javascript

    var marker5450635326848240000000 = new google.maps.Marker({
                              position: new google.maps.LatLng(31.2272,-85.4072),
                              map: map,
                              title: '4/10/2014'
                          });
    
                          markers.push(marker5450635326848240000000);
    

    我有地图和更新面板内的下拉列表。当用户更改下拉列表时,更新面板会更新所有内容,但地图上的引脚不会更改。

    以下是示例: http://prod.windcreekhospitality.bkwld.onyxtek.com/Giving-Back/Good-on-the-Go.aspx

    我知道这是更新面板,因为当我将面板从方程式中取出时,它会起作用。

    http://windcreekhospitality.com/Giving-Back/Good-on-the-Go

    ascx的全部代码在哪里 http://pastebin.com/FqX0PndG

    这是一个ascx控件,它是为与Kentico CMS一起使用而构建的。这限制了我的选择。

    2 回复  |  直到 12 年前
        1
  •  2
  •   DotNetSparky    12 年前

    我最近在尝试将captcha脚本集成到 UpdatePanel .

    更新面板 仅在初始页面加载时被浏览器识别。由于UpdatePanels的工作方式,任何新的脚本标记都不会正确地注入到浏览器中,以便实际执行。

    一个解决办法是使用 ScriptManager.RegisterStartupScript 方法从代码后面动态注册脚本块。然后,ASP.NET的ajax库将正确注册javascript代码并调用它来执行。

    如果将UpdatePanel控件作为第一个参数传递给RegisterStartupScript(),则代码将包含在第一页加载、所有完整回发和每个部分回发(如果正在更新UpdatePanel)的呈现中。

    在代码隐藏中,将javascript构建为字符串,然后将其传递给RegisterStartupScript。例子:

    protected override void OnPreRender(EventArgs e)
        {
            var s = new StringBuilder();
            s.Append(@"
                var markers = [];
                var currentWindow;
                var myLatlng = new google.maps.LatLng(32.3617,-86.2792);
                var mapOptions = {
                    zoom: 6,
                    center: myLatlng,
                    scrollwheel: false
                };
                var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
                $('#map-canvas').mouseleave(function(){
                    if(currentWindow)
                        currentWindow.close();
                });
                google.maps.event.addListener(map, 'mousedown', function() {
                if(currentWindow)
                    currentWindow.close();
            } );");
    
            // TODO: manually do whatever that cms:CMSRepeater control would be done to generate the additional JS and append it to the StringBuilder.
    
            ScriptManager.RegisterClientScriptBlock(EventsUpdatePanel, GetType(), "InitMap", s.ToString(), true);
    
            base.OnPreRender(e);
        }
    

    最好是将初始化映射的函数分离出来,将其移动到UpdatePanel的外部,并将其作为参数传递给要初始化的数据。让后面的代码生成JS,这只是对以数据为参数的函数的调用。

        2
  •  0
  •   Raymond A    12 年前

    我们团队处理此问题的一种方法是添加以下内容 在Web部件上(此处为地图)->信封->之前的内容

    <script type="text/javascript">
    function MyFunction() {
          ......
    }
    MyFunction();
    Sys.Application.add_load(MyFunction);
    </script>
    

    此外,将中继器置于脚本标记之外(请参见Pastbin代码),并如上所述调用pageLoad方法。

    推荐文章