我尝试使用Google地图来显示从数据库中提取的某些位置。它是自动售货点列表,由一组启动器分组,一旦启动器选择,必须在地图上显示。 在成功使用Subgurim.net库之后,我决定在https://www.codeproject.com/Articles/36151/Show-Your-Data-on-Google-Map-using-C-and-JavaScrip的帮助下转向Javascript实现(唯一的区别是我使用了GoogleMaps v3调用)。 javascript插入在页面加载时非常有效,但是当我需要在启动器代码上回发以显示他的自动售货点时,我可以在代码中看到加载在文字控件中的数据,但是没有标记在Web上呈现页。如果我使用Microsoft Edge的开发工具检查正在生成的页面,我总是会发现文字控件被替换为在第一次(无回发)页面加载期间加载的数据。 页面的aspx部分非常简单,并且它没有包含在UpdatePanel中,尽管在页面上使用了UpdatePanel,并且我也尝试在文字控件上使用EnableViewState true和false,没有变化。
这是aspx的相关部分:
<div id="mapContent" >
<asp:Literal ID="mapJs" runat="server" EnableViewState="false" />
<div id="mapDiv" style="width:100%; height:640px;" />
<div id="infoDiv">
....
</div>
</div>
这是插入脚本第一部分的代码部分:
StringBuilder map = new StringBuilder();
bool loadPVGiro = false;
double centerMapLat = 37.451669,
centerMapLong = 15.05263;
map.Append(@"<script type='text/javascript'>" + System.Environment.NewLine);
map.Append("var map;" + System.Environment.NewLine);
map.Append("function infoCallback(infowindow, marker)" + System.Environment.NewLine);
map.Append("{" + System.Environment.NewLine);
map.Append(" return function()" + System.Environment.NewLine);
map.Append(" {" + System.Environment.NewLine);
map.Append(" infowindow.open(map, marker);" + System.Environment.NewLine);
map.Append(" };" + System.Environment.NewLine);
map.Append("}" + System.Environment.NewLine);
map.Append("function mapLoad()" + System.Environment.NewLine);
map.Append("{" + System.Environment.NewLine);
map.Append("var centralPoint = { lat: " + centerMapLat.ToString().Replace(",", ".") + ", lng: " + centerMapLong.ToString().Replace(",", ".") + "};" + System.Environment.NewLine);
map.Append("var map = new google.maps.Map(document.getElementById('mapDiv'), { zoom: 12, center: centralPoint });" + System.Environment.NewLine);
map.Append("}" + System.Environment.NewLine); // mapLoad close
map.Append("</script>" + System.Environment.NewLine);
map.Append("<script async defer src=\"https://maps.googleapis.com/maps/api/js?key=MY_GOOGLE_MAPS_API_KEY&callback=mapLoad\"> " + System.Environment.NewLine);
map.Append("</script> " + System.Environment.NewLine);
mapJs.Text = map.ToString();
这是呈现页面的一部分(来自Edge的开发工具):
<div id="mapContent" >
<script type='text/javascript'>
var map;
function infoCallback(infowindow, marker)
{
return function()
{
infowindow.open(map, marker);
};
}
function mapLoad()
{
var centralPoint = { lat: 37.451669, lng: 15.05263};
map = new google.maps.Map(document.getElementById('mapDiv'), { zoom: 12, center: centralPoint });
}
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=MY_GOOGLE_MAPS_API_KEY&callback=mapLoad">
</script>
<div id="mapDiv" style="width:100%; height:640px;" />
....
发生回发,在选择了启动码后,脚本完全重新生成了标记列表,文字控件用新脚本填充(我只能通过断点看到它),但是页面上的控件仍然是第一个。显然,如果我在第一页加载期间强制执行代码,则所有标记都会正确显示。 脚本中的infoCallback函数仅用于强制为地图上放置的每个标记生成新的InfoWindow。 任何帮助将不胜感激。
鲁道夫。
PS:尝试使用ViewStateMode =&#34;禁用&#34;关于文字控制,没有变化。
PS2&GT;尝试了ClientScript.RegisterClientScriptBlock和ClientScript.RegisterStartupScript,但生成的脚本与文字控件完全相同。忘了提到实际的页面在MasterPage中。
答案 0 :(得分:0)
问题似乎与更新面板中的用户树有关;单击用户会生成回发,但在文字控件中注入的脚本永远不会在页面上更新,只能在代码隐藏中更新。删除updatepanel脚本已正确更新并执行。在我完成项目所需的修改之后,我将尝试进一步调查此行为。