我有一个创建标记函数是 JS,我想从 C# 调用它:
function createMarker(position, information) {
var marker = new google.maps.Marker({
position: position,
map: map
});
google.maps.event.addListener(marker, "click", function () {
infowindow = new google.maps.InfoWindow({ content: information });
if (prev_infowindow) {
prev_infowindow.close();
}
prev_infowindow = infowindow;
infowindow.open(map, this);
});
google.maps.event.addListener(map, "click", function () { //supprime l'infobulle affichée au clic sur la map
infowindow.close();
});
}
一开始它只有 1 个参数,我可以通过 C# 调用它,但现在它有 2 个参数,我很难让它工作。我总是遇到“)”或“:”的语法错误。
foreach (XmlElement elementNode in parentNode)
{
if (elementNode.GetAttribute("latitude") != String.Empty && elementNode.GetAttribute("longitude") != String.Empty)
{
lat = double.Parse(elementNode.GetAttribute("latitude"), CultureInfo.InvariantCulture)/100000;
lng = double.Parse(elementNode.GetAttribute("longitude"), CultureInfo.InvariantCulture) / 100000;
latStr = ""+lat;
lngStr = ""+lng;
latStr = latStr.Replace(',', '.');
lngStr = lngStr.Replace(',', '.');
position = "{lat: " + latStr + ", lng:" + lngStr + "}";
if (DistanceTo(latitude, longitude, lat, lng) < distance)
{
cpt++;
infoStations = "Some random string" ;
jsFunc = "createMarker(" + position + "," + infoStations+ ")";
coordMarkers.Add(new List<double> { lat, lng });
ScriptManager.RegisterClientScriptBlock(this, GetType(), "script"+cpt, "$(function () {" + jsFunc+"; });", true);
}
}
}
是否有可能是变量位置中的“,”有问题?因为如果我只传递 1 个参数,它会很好地创建带有空信息窗口的标记,但如果有 2 个参数,则标记或信息窗口都不会显示。
这是工作代码:
jsFunc = "createMarker(" + position + ")";
ScriptManager.RegisterClientScriptBlock(this, GetType(), "script"+cpt, "$(function () {" + jsFunc+"; });", true);
将字符串作为参数传递时,您需要对 JavaScript 字符串文字使用正确的语法,即用双引号将其括起来。
使用 HttpUtility.JavaScriptStringEncode
方法从 C# 中的字符串生成有效的 JavaScript 字符串文字。
jsFunc = "createMarker(" + position + "," + HttpUtility.JavaScriptStringEncode(infoStations, true) + ")";
我是一名优秀的程序员,十分优秀!