回发后不呈现asp.net文字控件

时间:2018-04-16 08:55:54

标签: javascript asp.net

我尝试使用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中。

1 个答案:

答案 0 :(得分:0)

问题似乎与更新面板中的用户树有关;单击用户会生成回发,但在文字控件中注入的脚本永远不会在页面上更新,只能在代码隐藏中更新。删除updatepanel脚本已正确更新并执行。在我完成项目所需的修改之后,我将尝试进一步调查此行为。