2012-06-30 130 views
2

这是我的javascript代码的JavaScript推对象数组:获取一个MVC3控制器动作

var bankOptions = {}; 
    var playerOptions = []; 
    bankOptions["BankTotalAmount"] = $("#totalBankAmountID").val(); 
    bankOptions["SinglePlayerAmount"] = $("#singlePlayerAmountID").val(); 
    while (_playerNumber != 0) { 

     if (_playerNumber == 1) { 
      var player1Option = {}; 
      player1Option["Name"] = $("#p" + _playerNumber + "Name").val(); 
      player1Option["Color"] = $("#p" + _playerNumber + "Color").val(); 

      playerOptions.push(player1Option); 
     } 

     if (_playerNumber == 2) { 
      var player2Option = {}; 
      player2Option["Name"] = $("#p" + _playerNumber + "Name").val(); 
      player2Option["Color"] = $("#p" + _playerNumber + "Color").val(); 

      playerOptions.push(player2Option); 
     } 

     if (_playerNumber == 3) { 
      var player3Option = {}; 
      player3Option["Name"] = $("#p" + _playerNumber + "Name").val(); 
      player3Option["Color"] = $("#p" + _playerNumber + "Color").val(); 

      playerOptions.push(player3Option); 
     } 

     if (_playerNumber == 4) { 
      var player4Option = {}; 
      player4Option["Name"] = $("#p" + _playerNumber + "Name").val(); 
      player4Option["Color"] = $("#p" + _playerNumber + "Color").val(); 

      playerOptions.push(player4Option); 
     } 

     _playerNumber--; 
    } 
    alert(playerOptions); 
    $.ajax({ 
     url: "/StartOption/setOptions/", 
     contentType: 'application/json', 
     data: JSON.stringify({ bankOptions: bankOptions, playerOptions: playerOptions }), 
     type: "POST", 
     timeout: 10000, 
     success: function (result) { 

     } 
    }); 

和我有这个控制器类

public class StartOptionController : Controller 
    { 
     private MonopolyDB db = new MonopolyDB(); 

     // 
     // GET: /StartOption/ 

     public ActionResult Index() 
     { 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult setOptions(BankOptions bankOptions, Playeroptions[] playerOptions) 
     { 
      //int length = (int)playerOptions.GetType().InvokeMember("length", BindingFlags.GetProperty, null, playerOptions, null); 
      BankAccount bankaccount = new BankAccount(); 
      bankaccount.ID = 1; 
      bankaccount.TotalAmmount = bankOptions.BankTotalAmount; 
      db.BankAccount_Table.Add(bankaccount); 
      db.SaveChanges(); 

      //Here i want to get each (player1Option, player2Option...) object array from that playerOptions object array 


      //return RedirectToAction("Index"); 

      return View(); 
     } 

    } 
    public class BankOptions 
    { 
     public int BankTotalAmount { get; set; } 
     public int SinglePlayerAmount { get; set; } 
    } 
    public class Playeroptions 
    { 
     public string Name { get; set; } 
     public string Color { get; set; } 
    } 

我的问题是我怎么可以让这些对象数组我在我的setOptions操作中推入playerOptions对象数组?

就像我想从playerOptions对象数组中的每个玩家信息保存在我的数据库中,我将每个玩家信息推送到我的JavaScript代码中。

回答

3

那么首先可以很容易,我想建议改变你的行动

public ActionResult setOptions(BankOptions bankOptions, Playeroptions[] playerOptions) 

public ActionResult setOptions(BankOptions bankOptions, List<PlayerOptions> playerOptions) 

这就是它要使它很容易的符号数组中每个元素的句柄,并且框架没有序列化这个对象的问题。

现在回答你的问题,你可以重复这样的

[HttpPost] 
    public ActionResult setOptions(BankOptions bankOptions, Playeroptions[] playerOptions) 
    { 
     //int length = (int)playerOptions.GetType().InvokeMember("length", BindingFlags.GetProperty, null, playerOptions, null); 
     BankAccount bankaccount = new BankAccount(); 
     bankaccount.ID = 1; 
     bankaccount.TotalAmmount = bankOptions.BankTotalAmount; 
     db.BankAccount_Table.Add(bankaccount); 
     db.SaveChanges(); 

     //Here i want to get each (player1Option, player2Option...) object array from that playerOptions object array 
     for (int i = 0 ; i< playerOptions.Length, i++) 
     { 
      playerOptions[i]; //<-- this give's the specific element 
     } 

     //return RedirectToAction("Index"); 

     return View(); 
    } 

阵列不过,如果你按照我的建议,并改变了你的行动的标志,你可以重复这样的

[HttpPost] 
    public ActionResult setOptions(BankOptions bankOptions, List<PlayerOptions> playerOptions) 
    { 
     //int length = (int)playerOptions.GetType().InvokeMember("length", BindingFlags.GetProperty, null, playerOptions, null); 
     BankAccount bankaccount = new BankAccount(); 
     bankaccount.ID = 1; 
     bankaccount.TotalAmmount = bankOptions.BankTotalAmount; 
     db.BankAccount_Table.Add(bankaccount); 
     db.SaveChanges(); 

     //Here i want to get each (player1Option, player2Option...) object array from that playerOptions object array 
     foreach(var item in playerOptions){ 
      item //<--- in this variable you have the element PlayerOption 
     } 

     //return RedirectToAction("Index"); 

     return View(); 
    } 
+0

我你的代码刚刚在昨天处理了这个问题,我同意使用列表选项可能是迄今为止最容易处理的选项。 – Chris

+0

Yeap,我在几个月前处理这个问题......框架的伟大是它没有做任何事情的序列化句柄 – Jorge

相关问题