Obtenga la matriz de objetos push de javascript en una acción del controlador MVC3

Este es mi código 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) {

        }
    });

y tengo esta clase de controlador

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; }
    }

Mi pregunta es ¿cómo puedo obtener esa matriz de objetos que introduzco en la matriz de objetos playerOptions en mi acción setOptions?

como si quisiera guardar la información de cada jugador en mi base de datos de la matriz de objetos playerOptions donde presiono la información de cada jugador en mi código javascript.

preguntado el 30 de junio de 12 a las 14:06

1 Respuestas

Bueno primero para ponértelo fácil me gustaría recomendarte que cambies el signo de tu acción

en

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

A

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

Eso facilitará el manejo de cada elemento de la matriz, y no hay problema para que el marco serialice este objeto.

Ahora, para responder a su pregunta, podría iterar la matriz de esta manera

    [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();
    }

Sin embargo, si sigue mi recomendación y cambia el signo de su acción, podría iterar su código de esta manera

  [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();
    }

Respondido 01 Jul 12, 04:07

Me ocupé de esto ayer y acepto que usar la Lista La opción probablemente será, con mucho, la más fácil de usar. - Chris

Sí, también me ocupé de este problema hace un par de meses ... Lo mejor del marco es el manejo de la serialización sin hacer nada: Jorge

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.