调用 C# 方法时.aspx上下文错误



在我的前端,我试图动态调用方法,但我不断收到上下文错误。 我的代码看起来像这样,错误是由我的"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())%>;

最新更新