1

我目前正在尝试将已知类型(列表)传递给需要由页面加载上的 javascript 拾取的 asp.net 网络表单。

我正在创建的模拟数据如下所示:

   protected List<MapCoords> createCoordinateList()
    {
       List<MapCoords> latlng = new List<MapCoords>();
       MapCoords m = new MapCoords();
       m.xCoord = 34.241182;
       m.yCoord = -77.946839;
       latlng.Add(m);
       m.xCoord = 34.242176;
       m.yCoord = -77.94538;
       latlng.Add(m);
       return latlng
     }

我被卡住的地方(可能只是在当天晚些时候)是过去我进行了 ajax 调用并将结果成功返回到页面的对象。然而,在这种情况下,此模拟数据是由服务器端事件生成的,因此不使用 ajax 来调用或调用该方法。由于对象具有多个属性(x,y),我不能只将值设置为隐藏字段,这就是为什么我认为需要将其作为对象传递。如果迫不得已,我可以使用 ajax 来调用该方法,但这几乎是对我正在尝试做的事情的双重调用,所以我想避免这种情况是可能的

所以问题是如何获取包含坐标的列表并使其可供客户端中的 javascript 访问?这种类型可能会变得更健壮(即更多的属性,所以我需要确保属性保留它们的关联 x 到 y )

干杯,

4

2 回答 2

4

您可以在 aspx 页面或 .asmx webservice 中使用 web 方法传递类数组。ScriptService 属性会将您的类数组转换为 json 对象。这个简单的例子来理解你如何做到这一点,jQuery Ajax with asp.net

[ScriptService]
public class YourClass : Page
{
    [WebMethod]   
    public static []MapCoords createCoordinateList()
    {
        //Your code
        return arrOfMapCoords;   
    }
}
于 2012-06-29T21:32:46.167 回答
1

为您创建了一个小例子:

服务器代码:

public class MapCoords
{
    public double x { get; set; }
    public double y { get; set; }
}
public partial class _Default : System.Web.UI.Page
{
    [WebMethod]
    public static List<MapCoords> createCoordinateList()
    {
        List<MapCoords> latlng = new List<MapCoords>();
        MapCoords m = new MapCoords();
        m.x = 2.00;
        m.y = 3.1512;
        latlng.Add(m);

        m = new MapCoords();
        m.x = 3.00;
        m.y = 4.1512;
        latlng.Add(m);
        return latlng;
    }
}

客户代码:

<script language="javascript" type="text/javascript">
    $(document).ready(function () {
        $.ajax({
            type: "POST",
            url: "Default.aspx/createCoordinateList",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                if (msg != null) {
                    for (i = 0; i <= msg.d.length; i++) {
                        alert(msg.d[i].x + " " + msg.d[i].y);   
                    }
                }
            }
        });
    });
</script>

这使用 jQuery 和 json。不要忘记包含jQuery库。祝你好运!

于 2012-06-29T21:44:50.693 回答