javascript对象列表失败的Ajax请求

javascript对象列表失败的Ajax请求,ajax,asp.net-mvc,Ajax,Asp.net Mvc,这个问题被问了很多,但没有一个答案对我有用。我正在尝试向ASP MVC 5中的控制器发送对象列表。我正在对列表进行字符串化,并试图将其接收到列表中 我真的希望我错过的不是什么愚蠢的打字错误 嗯,我确实发现了一个打字错误(有趣的是,写下来会有帮助),但这不是问题所在。ajax调用“Sale”,而控制器调用“Sales”。我修好了,但还是一样的问题。(在末尾添加了图片) 编辑 我将ajax更改为: $('#complete-sale').on('click', function () { a

这个问题被问了很多,但没有一个答案对我有用。我正在尝试向ASP MVC 5中的控制器发送对象列表。我正在对列表进行字符串化,并试图将其接收到列表中

我真的希望我错过的不是什么愚蠢的打字错误

嗯,我确实发现了一个打字错误(有趣的是,写下来会有帮助),但这不是问题所在。ajax调用“Sale”,而控制器调用“Sales”。我修好了,但还是一样的问题。(在末尾添加了图片)

编辑

我将ajax更改为:

$('#complete-sale').on('click', function ()
{
    alert("in complete sale");
    var itemsInCart = JSON.stringify(shoppingCart.getItemsInCart());
    alert("itemsInCart: " + itemsInCart);
    $.ajax({
        type: "GET",
        url: "/Sales/completeSale", // the method we are calling
        contentType: "application/json; charset=utf-8",
        data: { 'itemsInCart': itemsInCart },
        dataType: "json",
        success: function (result) {
            alert("sale complete succeeded" + result[0]);
            addItemToCart(result[0]);
        },
        error: function (result) {
            alert("failed complete sale request " + result[0]);
        }
    });
});
开发人员工具中显示的请求URL现在是:

http://localhost:52459/Sales/completeSale?itemsInCart=[{"ItemId":1,"Quantity":"1","Price":3.5}]
看起来应该是对的。我还将控制器return更改为
返回视图(“hello”)
,因此实际返回了一些内容

型号:

public class ItemInCart
{
    [Key]
    public int ItemId { get; set; }
    public virtual Variety variety { get; set; }

    public int Quantity { get; set; }
    public virtual InventoryItem inventoryItem { get; set; }

    public double Price { get; set; }
    public virtual Variety price { get; set; }

}
控制器(
Sales.cs
):


前几天我遇到了这个问题,它可能有点让人困惑,特别是在您的情况下,方法签名涉及到视图模型的列表

JSON.stringify()
似乎总是能很好地处理
POST
数据,也许其他人可以解释原因,但对于
GET
请求,这不是正确的解决方案


我遇到的问题是请求一个包含
int
列表的URL,与您一样,它要么显示为
null
,要么出现错误。我实际上需要做的是创建一个查询字符串,如下所示:
?selectedIds=1&selectedIds=2&selectedIds=3

您应该发布这个。您正在执行一个Ajax GET请求,它应该是一个从代码外观来看的帖子。@jumpingcode为什么?我的其他类似GET请求工作正常——它们不是列表。如果您的方法要更改数据库,它应该是POSTOk,它要进行更改,其他GET请求只是收集信息。但是,原则上,这个请求还是应该通过的,对吗?控制器当前为空。我会试着把它作为帖子。但正如你所看到的,我并没有发送一个INT列表。URL是
http://localhost:52459/Sales/completeSale?{“itemsInCart”:[{“ItemId”:1,“数量”:“1”,“价格”:3.5}]}
。虽然,现在我看到了,也许这并不完全正确。它可能是
…?itemsInCart=[{…}]
。我可以稍后发布答案,但你现在应该可以自己找到答案了。我想我现在已经确定了URL请求(请参见问题编辑)。问题是,我是个初学者。我能够弄清楚如何使ajax请求使用单个对象,而不是对象列表。
    [HttpGet]
    public ActionResult completeSale(List<ItemInCart> itemsInCart)
    {
        return View();
    }
$('#complete-sale').on('click', function ()
{
    alert("in complete sale");
    itemsInCart = shoppingCart.getItemsInCart();
    stringifiedItemsInCart = JSON.stringify({ 'itemsInCart': itemsInCart});
    alert("stringified: " + stringifiedItemsInCart);
    $.ajax({
        type: "GET",
        url: "/SalescompleteSale", // the method we are calling
        contentType: "application/json; charset=utf-8",
        data: stringifiedItemsInCart,
        dataType: "json",
        success: function (result) {
            alert("sale complete succeeded" + result[0]);
            addItemToCart(result[0]);
        },
        error: function (result) {
            alert("failded complete sale request " + result[0]);
        }
    });
});