在MVC3控制器操作中获取javascript推送对象数组

时间:2012-06-30 13:56:28

标签: javascript asp.net-mvc-3

这是我的javascript代码:

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) {

        }
    });

我有这个Controller类

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代码中推送每个玩家信息。

1 个答案:

答案 0 :(得分: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();
    }