我有一个转发器,可以为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一起使用。这限制了我的选择。
答案 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方法。