我正在尝试加载以下JS方法:
<script type="text/javascript">
function initialize(lon,lat) {
var myLatlng = new google.maps.LatLng(lon,lan);
var myOptions = {
zoom: 14,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(document.getElementById("map"), myOptions);
var marker = new google.maps.Marker({
position: myLatlng,
map: map
});
}
</script>
在我的VB.NET代码中,我想加载如:
initialize(53.349803617967446, -6.260257065296173)
我需要加载代码,因为我必须从DB中获取longtidude和latidude。
答案 0 :(得分:1)
通常最好的做法是直接从后面的代码调用Javascript函数。后面的代码是在页面呈现之前发生的代码。
我要做的是在页面中添加两个隐藏的文字,latitude
和longitude
,并在DOM ready事件上调用初始化函数。 initialize函数将从创建的文字中检索纬度/经度值。
Here is a good resource如果您不熟悉,请了解DOM就绪事件。
编辑:如果以上不是一个选项,您可以以相当迂回的方式从代码隐藏中“调用”它(这几乎与我的其他解决方案在功能上相同)。
<body runat="server">
让你的身体标签看起来像这样,然后将其添加到代码隐藏:
var javascriptFunction = string.format("javascript:initialize({0}, {1})", latValue, longValue);
Body.Attributes.Add("Onload", javascriptFunction);
答案 1 :(得分:1)
Chuck建议的替代方法 - 您可以将函数保留在.aspx中,并使用内联代码将这些值直接写入Javascript,如下所示:
initialize(<%=strLat%>, <%=strLon%>)
strLat和strLon将被定义为代码隐藏中的受保护变量。
如果你真的希望代码隐藏写出整个函数,请查看RegisterClientScriptBlock方法。
答案 2 :(得分:0)
您可以使用RegisterClientScriptBlock
从代码隐藏中将Javascript插入到页面中。
您可以将其插入到要注册的任何函数中,并将其格式化为:
ClientScriptManager.RegisterClientScriptBlock(typeof(this), "SomeKeyName", "initialize(" + lat + "," + long + ");", true);
其中SomeKeyName
是一个唯一键,可防止每次回发多次添加脚本。
答案 3 :(得分:0)
如果必须从代码隐藏中注册函数和调用,则需要使用ScriptManager.RegisterClientScriptBlock
作为函数,并使用ScriptManager.RegisterStartupScript
来调用函数。如果函数的呈现不依赖于服务器代码中的任何内容,那么最好不要从代码中注册它。