将JS数组传递给控制器​​的动作

时间:2012-03-28 10:41:31

标签: javascript asp.net-mvc

我有以下代码:

 <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被填满。但在我的行动中placesnull。如果我将string[]更改为简单string,则结果相同。 哪里有问题?

感谢。

3 个答案:

答案 0 :(得分:2)

请注意传统参数序列化。更多详情: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 :(得分:1)

我建议你只使用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);"

答案 2 :(得分:1)

我的解决方案:
HttpPost添加到操作中,然后将method="POST"添加到表单中。