返回2dimentional数组以从Asp.Net MVC 3中的控制器查看

时间:2012-02-29 19:29:12

标签: json asp.net-mvc-3 jquery

我的模型是:private int [,] mapTilesArray = new int [10,10]; 我想要做的是使用$ .ajax修改此模型,然后从控制器返回它 在我看来然后根据这个数组中的任何值,我想在我的视图中构造一个类似的div数组。所以现在我不知道如何使用json格式将此模型返回到我的视图。

我的Ajax请求:

    var backgroundColor;
$(function () {

    $(".mapTile").click(function () {
        $("#info").text($(this).attr("x"));
        var tile = {
            X: $(this).attr("x"),
            Y: $(this).attr("y")
        };

        $.ajax({
            beforeSend: function () { ShowAjaxLoader(); },
            url: "/Game/ShowTiles",
            type: "POST",
            contentType: "application/json;charset=utf-8",
            dataType: "json",
            data: JSON.stringify(tile),
            success: function (data) { HideAjaxLoader(); },
            error: function () { HideAjaxLoader(); }
        });
    });

控制器:

   [HttpPost]
    public ActionResult ShowTiles(TileModel tile)
    {
        MapModel map = new MapModel();
        map.MapTilesArray[tile.X, tile.Y] = 1;

        return this.Content(map.MapTilesArray.ToString());
    }

那么如何以最有效的方式完成这项工作?如何在我的视图中重新创建此数组?

1 个答案:

答案 0 :(得分:0)

一个真正快速而肮脏的解决方案可能如下,你可能想在这里和那里稍微调整一下;)

我假设您已经有225个div代表您网页上的单元格,其中id从例如cell_1变为cell_225。

查看:

   $.ajax({
            beforeSend: function () { ShowAjaxLoader(); },
            url: "/Game/ShowTiles",
            type: "POST",
            contentType: "application/json;charset=utf-8",
            dataType: "json",
            data: JSON.stringify(tile),
            success: function (data) {
                $.each(data, function (index, item) {
                    if (item) {
                        var cellnumber = ((item.Y * 15) + item.X);
                        $("#cell_" + cellnumber).innerText = item.Value;
                    }
                });
                HideAjaxLoader(); 
            },
            error: function () {
                HideAjaxLoader();
            }
        });

控制器/型号:

public class MapModel
{
    public TileModel[,] MapTilesArray;

    public MapModel()
    {
        MapTilesArray = new TileModel[15, 15];
    }
}

public class TileModel
{
    public int X;
    public int Y;
    public int Value { get; set; }
}



[HttpPost]
public ActionResult ShowTiles(TileModel tile)
{
    MapModel map = new MapModel();
    map.MapTilesArray[tile.X, tile.Y] = new TileModel { X = tile.X, Y=tile.Y, Value = 1};

    return Json(map.MapTilesArray);
}