Javascript 回发后未呈现asp.net文本控件
我试图使用谷歌地图来显示从数据库中提取的一些位置。这是一个自动售货点列表,由一组促销员分组,在促销员选择后,必须显示在地图上。 在成功使用Subgurim.net库之后,我决定转向Javascript实现,唯一的区别是我使用的是GoogleMaps v3调用。 javascript插入在页面加载时工作得很好,但是当我需要对发起人代码进行回发以显示他的销售点时,我可以在代码中看到文本控件中加载的数据,但网页上没有呈现标记。如果我使用MicrosoftEdge的开发工具检查生成的页面,我总是会发现文本控件被第一次无回发页面加载期间加载的数据替换。 页面的aspx部分非常简单,它不包含在UpdatePanel中,尽管页面上使用了UpdatePanel,我也尝试过在文本控件上启用EnableViewState true和false,没有任何更改 这是aspx的相关部分:Javascript 回发后未呈现asp.net文本控件,javascript,asp.net,Javascript,Asp.net,我试图使用谷歌地图来显示从数据库中提取的一些位置。这是一个自动售货点列表,由一组促销员分组,在促销员选择后,必须显示在地图上。 在成功使用Subgurim.net库之后,我决定转向Javascript实现,唯一的区别是我使用的是GoogleMaps v3调用。 javascript插入在页面加载时工作得很好,但是当我需要对发起人代码进行回发以显示他的销售点时,我可以在代码中看到文本控件中加载的数据,但网页上没有呈现标记。如果我使用MicrosoftEdge的开发工具检查生成的页面,我总是会发现文
<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=disabled,但没有更改
PS2>尝试了ClientScript.RegisterClientScriptBlock和ClientScript.RegisterStartupScript,但生成的脚本与文本控件完全相同。忘记提到实际页面在母版页中。问题似乎与更新面板中的用户树有关;单击用户会生成回发,但是文本控件中注入的脚本在页面上永远不会更新,只在codebehind中更新。删除updatepanel将正确更新并执行脚本。在我完成项目所需的修改之后,我将尝试进一步调查这种行为