1

現在、既知のタイプ (リスト) を、ページロード時に JavaScript で取得する必要がある asp.net Web フォームに渡そうとしています。

私が作成しているモック データは次のようになります。

   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 Web サービスの両方で、Web メソッドを使用してクラスの配列を渡すことができます。ScriptService 属性は、クラス配列を json オブジェクトに変換します。これを行う方法を理解するためのこの簡単な例は、asp.net を使用した jQuery Ajaxです。

[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 に答える