передача массива JS в действие контроллера - PullRequest
3 голосов
/ 28 марта 2012

У меня есть следующий код:

 <form action="" onsubmit="getSelectedPlace(this);" target="_blank">
        <div class="wrap_input">
            <input type="submit" id="myDiv" class="btn buy_btn" value="Done">
        </div>
        </form>

 function getSelectedPlace(form) {
        var placesID = new Array();
        $(".place.green").each(function () {
            placesID.push($(this).attr("id"));
        });

        form.action = "/Pay/Buy?places=" + placesID;
        return true;
    }

В getSelectedPlace я получаю ID, вставляю его в массив и заполняю action. Мое действие:

 public ActionResult Buy(string[] places)
            {
                return new EmptyResult();
            }

В клопе placesID заполнен. Но в моем действии places есть null. Если я изменю string[] на простой string, результат будет таким же. Где проблема?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 28 марта 2012

Обратите внимание на традиционную сериализацию параметров. Подробнее здесь: http://api.jquery.com/jQuery.param/

<script type="text/javascript">

    var strArray = new Array();

    strArray[0] = "P1";
    strArray[1] = "P2";

    var params = { data: strArray };

    $.ajax({
        type: "GET",
        url: "/Home/Test",
        data: params,
        dataType: "json",
        traditional: true
    });
</script>
}

Контроллер:

public ActionResult Test(string[] data)
{
    @ViewBag.Test = data[0]; // Data will be set to P1
    return null;
}
1 голос
/ 28 марта 2012

Мое решение:
Добавьте HttpPost к действию и добавьте method="POST" к форме.

1 голос
/ 28 марта 2012

Я бы предложил вам использовать только string. отделите его запятой или любым другим обозначением, которое вы хотите.

function getSelectedPlace(form) {
    var placesID = "";
    $(".place.green").each(function () {
        placesID = $(this).attr("id") +  "," + placesID;
    });

    form.action = "/Pay/Buy?places=" + placesID;
    return true;
}

В действии,

public ActionResult Buy(string places)
        {
            string[] placesArray = places.Split(",");
            return new EmptyResult();
        }

Также использование onsubmit="getSelectedPlace(this);" небезопасно. используйте onsubmit="return getSelectedPlace(this);"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...