调用c#方法时.aspx中的上下文出错
在我的前端,我尝试动态地调用方法,但是我不断地得到上下文错误。 我的代码如下所示,错误由我的“i”给出: .aspx:调用c#方法时.aspx中的上下文出错,c#,html,asp.net,leaflet,C#,Html,Asp.net,Leaflet,在我的前端,我尝试动态地调用方法,但是我不断地得到上下文错误。 我的代码如下所示,错误由我的“i”给出: .aspx: ... 一些代码 AllObject=“”; 标记([0,0],0).addTo(map).bindpoop(“测试”); 对于(变量i=0;i
... 一些代码
AllObject=“”;
标记([0,0],0).addTo(map).bindpoop(“测试”);
对于(变量i=0;i<2;i++)
{
对象长度=所有对象[i]。经度;
ObjLatitue=AllObject[i]。纬度;
创建标记(对象长度、对象宽度)
标记([0,0],0).addTo(map).bindpoop(“测试”);
L.marker([0,50],0).addTo(map).bindpoppup(ObjLatitue);
}
函数CreateMarkers(ObjLong、ObjLat){
L.marker([ObjLong,ObjLat],0).addTo(map).bindpoop(“测试”);
}
... 一些代码
.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()
{
List MapObjects=新列表();
……一些代码
返回MapObjects;
}
公共类MapObjectEntity
{
//性质
公共Guid MapObjectGuid{get;set;}
公共字符串数据{get;set;}
公共整数纬度{get;set;}
公共Guid链接{get;set;}
公共整数经度{get;set;}
公共int相对权重{get;set;}
公共int相对宽度{get;set;}
公共整数旋转{get;set;}
public bool ObjectShowFov{get;set;}
公共Guid MapObjectType{get;set;}
}
因此,在ParseMapObjects中,我返回MapObjectEntity的列表。然后,我尝试在我的.aspx(frontend)中捕获它,以便将其用作对象(例如:object.property)
行AllObject=“”代码>我成功地拉取了对象,但似乎找不到使用AllObject
获取属性的方法(例如:AllObject[0].Latitude)
我的目标是循环我的AllObject并提取所有纬度和经度值。但我可以
谢谢您需要序列化
public string ParseMapObjects()
{
List<MapObjectEntity> MapObjects = new List<MapObjectEntity>();
return new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(MapObjects);
}
公共字符串ParseMapObjects()
{
List MapObjects=新列表();
返回新的System.Web.Script.Serialization.JavaScriptSerializer().Serialize(MapObjects);
}
和脚本中的访问权限类似
var AllObject = <%=(ParseMapObjects())%>;
var AllObject=;
除非ParseMapObjects()返回JSON字符串(类似于caner的答案)
这行不通
请记住,一旦加载了页面,该值将是固定的,因为它是输出到页面的C#方法的结果,而不是对该方法的引用。如果多次运行Javascript,则该行中分配给AllObject
的值将保持不变,因为它在JS上下文中基本上是一个静态对象(检查浏览器的视图源以查看输出内容)
不能直接从JavaScript调用C#方法,反之亦然。C#在服务器上执行,并构造HTML、CSS和JS以输出到浏览器。页面(即C#生成的内容)从服务器下载到浏览器并初始化后,JavaScript在客户端浏览器中运行。他们处于完全不同的环境中(通常在不同的计算机上),本质上彼此不了解。如果您想开发web应用程序,这种分离是一个必须掌握的重要概念
如果您希望客户端(浏览器)和服务器之间的通信超出正常的页面加载/刷新/回发机制,那么您需要使用AJAX功能,甚至如果您想要实时通信,类似WebSockets和/或signer的东西。您不能使用这种方法从客户端调用代码隐藏的公共方法。您需要将该方法声明为webmethod,并使用AJAX调用它。。我尝试了这个,但是如果我检查AllObject的内容,我只得到这个:“[]”。我试着用它来表示:AllObject.Longitude,我什么都没有得到,甚至智能感知也没有显示任何东西。你填好你的列表了吗?您应该像下面这样获得返回的json$(document).ready(函数(){var AllObject=;})代码>可能你的某些代码中有问题。你能发布吗?试着调试ParseMapObjects()
我必须将所有内容转换为JSON,你说得对!现在我可以玩了。
var AllObject = <%=(ParseMapObjects())%>;