2

配列を作成して途中で送信するために使用するJavaScriptコードは次のとおりです。

<script type="text/javascript" language="javascript">
    $(document).ready(function () {
        $("#update-cart-btn").click(function() {
            var items = [];
            $(".item").each(function () {
                var productKey = $(this).find("input[name='item.ProductId']").val();
                var productQuantity = $(this).find("input[type='text']").val();
                items[productKey] = productQuantity;
            });

            $.ajax({
                type: "POST",
                url: "@Url.Action("UpdateCart", "Cart")",
                data: items,
                success: function () {
                    alert("Successfully updated your cart!");
                }
            });
        });
    });
</script>

オブジェクトは、items必要な値で適切に構築されています。

コントローラーのバックエンドでオブジェクトが持つべきデータ型は?

これを試しましたが、変数はnullのままでバインドされていません。

[Authorize]
[HttpPost]
public ActionResult UpdateCart(object[] items) // items remains null.
{

    // Some magic here.
    return RedirectToAction("Index");
}
4

1 に答える 1

10

JSON をサーバーに送信する場合は、データをJSON.stringifyapplication/jsonし、MVC3 モデル バインダーで適切に動作するように contentType を指定する必要があります。

    $.ajax({
            type: "POST",
            url: "@Url.Action("UpdateCart", "Cart")",
            data: JSON.stringify(items),
            success: function () {
                alert("Successfully updated your cart!");
            },
            contentType: 'application/json'
        });

サーバー上のデータ型として、強く型付けされたクラスを使用できます。

public class Product
{
    public int ProductKey { get; set; }
    public int ProductQuantity { get; set; }
}

[HttpPost]
public ActionResult UpdateCart(Product[] items)
{

    // Some magic here.
    return RedirectToAction("Index");
}

itemsただし、リストを少し調整する必要があります。

var items = [];
$(".item").each(function () {
   var productKey = $(this).find("input[name='item.ProductId']").val();
   var productQuantity = $(this).find("input[type='text']").val();
   items.push({ "ProductKey": productKey, "ProductQuantity": productQuantity });
});

基本的に、JSON オブジェクト構造は C# モデル クラス構造と一致する必要があり (プロパティ名も一致する必要があります)、MVC のモデル バインダーは、送信した JSON データをサーバー側モデルに入力します。モデル バインダーの詳細については、こちらを参照してください。

于 2012-04-06T16:36:11.553 に答える