2012-02-29 2 views
0

У меня есть модель, которая есть: private int [,] mapTilesArray = new int [10, 10]; Что я хочу сделать, так это использовать $ .ajax, чтобы изменить эту модель, а затем вернуть ее с контроллера на мой взгляд. Затем, основываясь на любых значениях внутри этого массива, я хочу построить подобный массив divs в моем представлении. Так что пока я не знаю, как вернуть эту модель в мое представление, используя формат json.return 2размерный массив для просмотра с контроллера в Asp.Net MVC 3

мой 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()); 
    } 

Так как же это сделать наиболее эффективным способом? Как мне воссоздать этот массив на мой взгляд?

+0

В контроллере, вы пробовали просто возвращение "JSON (карта)"? – Dave

+0

нет, поэтому я сделаю так –

+0

, но даже в этом случае, как бы проверить значения внутри него? –

ответ

0

Реальный быстрый и грязный раствор может быть следующим, вы можете настроить его немного здесь и там;)

Я предполагаю, что у вас уже есть как 225 дивы, представляющие клетки на странице, с идентификаторами переход от, например, 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); 
} 
Смежные вопросы