Google会在更新面板中进行映射

时间:2014-04-01 19:58:16

标签: asp.net google-maps kentico

我有一个转发器,可以为Google地图输出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);

我在updatepanel中有地图和下拉菜单。当用户更改下拉菜单时,updatepanel会更新所有内容,但地图上的图钉不会更改。

以下是示例: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 个答案:

答案 0 :(得分:2)

我最近在尝试将验证码脚本集成到UpdatePanel内时遇到了类似的问题。

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

一种解决方法是使用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的OUTSIDE,并将其作为参数传递给您希望它初始化的数据。让代码隐藏生成JS,它只是以数据作为参数调用该函数。

答案 1 :(得分:0)

我们的团队通过添加以下内容来处理此问题 在Webpart上(这里是你的地图) - >信封 - >之前的内容

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

此外,将转发器带到脚本标记之外(请参阅您的Pastbin代码)并按照描述调用pageLoad方法。