2

これは私の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) {

        }
    });

そして私はこのコントローラークラスを持っています

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 オブジェクト配列にプッシュするオブジェクト配列を取得する方法です。

同様に、各プレーヤー情報を自分の Javascript コードにプッシュする playerOptions オブジェクト配列から DB に各プレーヤー情報を保存したいと考えています。

4

1 に答える 1

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();
    }
于 2012-07-01T03:44:06.430 に答える