在我的前端,我试图动态调用方法,但我不断收到上下文错误。 我的代码看起来像这样,错误是由我的"i"给出的: 。.aspx:
<script src="https://PCYULD0029:8012/Maps/leaflet.js"></script>
<script >
... some code
AllObject = "<%=(ParseMapObjects())%>";
L.marker([0, 0], 0).addTo(map).bindPopup("test");
for (var i = 0; i < 2; i++)
{
ObjLongitude = AllObject[i].Longitude;
ObjLatitue = AllObject[i].Latitude;
CreateMarkers(ObjLongitude, ObjLatitude)
L.marker([0, 0], 0).addTo(map).bindPopup("test");
L.marker([0, 50], 0).addTo(map).bindPopup(ObjLatitue);
}
function CreateMarkers(ObjLong, ObjLat) {
L.marker([ObjLong, ObjLat], 0).addTo(map).bindPopup("Test");
}
... some code
</script>
.aspx.cs :
public List<MapObjectEntity> ParseMapObjects()
{
List<MapObjectEntity> MapObjects = new List<MapObjectEntity>();
.... Some code
return MapObjects;
}
public class MapObjectEntity
{
// Properties
public Guid MapObjectGuid { get; set; }
public string Data { get; set; }
public int Latitude { get; set; }
public Guid Link { get; set; }
public int Longitude { get; set; }
public int RelativeHeight { get; set; }
public int RelativeWidth { get; set; }
public int Rotation { get; set; }
public bool ObjectShowFov { get; set; }
public Guid MapObjectType { get; set; }
}
因此,在 ParseMapObjects 中,我返回一个 MapObjectEntity 列表。然后,我尝试在我的.aspx(前端)中捕获它,以便我可以将其用作对象(例如:Object.property)。
使用AllObject = "<%=(ParseMapObjects())%>";
行,我成功地拉动了对象,但我似乎找不到使用AllObject
来获取我的属性的方法(例如:AllObject[0]。纬度)。
我的目标是遍历我的 AllObject 并提取所有纬度和经度值。但我可以
谢谢
除非 ParseMapObjects() 返回一个 JSON 字符串(类似于 caner 的答案) 这是行不通的。
请记住,加载页面后,此值将是固定的,因为它是输出到页面的 C# 方法的结果,而不是对该方法的引用。如果你多次运行Javascript,分配给该行AllObject
的值将保持固定,因为它基本上是JS上下文中的一个静态对象(检查浏览器的View Source以查看输出的内容)。
不能直接从 JavaScript 调用 C# 方法,反之亦然。C# 在服务器上执行并构造 HTML、CSS 和 JS 以输出到浏览器。JavaScript 在页面(即 C# 生成的内容)从服务器下载到浏览器并初始化后,在客户端的浏览器中运行。它们处于完全独立的环境中(通常在不同的计算机上),本质上彼此不了解。如果要开发Web应用程序,这种分离是一个至关重要的概念。
如果您希望客户端(浏览器)和服务器之间的通信超出正常的页面加载/刷新/回发机制,那么您需要使用 AJAX 功能,甚至,如果您想要实时通信,则需要像 WebSockets 和/或 SignalR 这样的东西。
你需要序列化...
public string ParseMapObjects()
{
List<MapObjectEntity> MapObjects = new List<MapObjectEntity>();
return new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(MapObjects);
}
并在您的脚本中访问,例如
var AllObject = <%=(ParseMapObjects())%>;