Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#MVC Ajax子列表_C#_Ajax_List_Model View Controller_Controller - Fatal编程技术网

C#MVC Ajax子列表

C#MVC Ajax子列表,c#,ajax,list,model-view-controller,controller,C#,Ajax,List,Model View Controller,Controller,我有以下设置 HTML $.ajax({ url: 'Transaction/updateTransaction', data: saveDataObject, }).done(function (e) { // done }); 在网络选项卡中显示它正在发送正确的数据 查询字符串参数 key:2445 transactionDescription:Description Block transactionToType[0][transactionToTypeKey]:

我有以下设置

HTML

$.ajax({
    url: 'Transaction/updateTransaction',
    data: saveDataObject,
}).done(function (e) {
    // done
});
在网络选项卡中显示它正在发送正确的数据

查询字符串参数

key:2445
transactionDescription:Description Block
transactionToType[0][transactionToTypeKey]:1
transactionToType[0][transactionKey]:2445
transactionToType[0][transactionValue]:51.25
transactionToType[0][transactionTypeKey]:10
transactionToType[1][transactionToTypeKey]:2
transactionToType[1][transactionKey]:2445
transactionToType[1][transactionValue]:10.5
transactionToType[1][transactionTypeKey]:1
控制器

public class TransactionSave
{
    public int key { get; set; }
    public string transactionDescription { get; set; }
    public List<TransactionToTypeSave> transactionToType { get; set; }
}

public class TransactionToTypeSave
{
    public int transactionKey { get; set; }
    public int transactionToTypeKey { get; set; }
    public int transactionTypeKey { get; set; }
    public decimal transactionValue { get; set; }
}

public int updateTransaction(TransactionSave transactionSave)
{
}
在ajax中传递对象内部的列表有什么不对


谢谢,它失败了,因为您的ajax调用正在发出GET请求

如果在使用
$.ajax
方法时未指定类型proeprty,它将进行GET调用。对于GET调用,数据将作为querystring键值项附加到要进行ajax调用的url中

当发送具有其他类型的子属性的复杂对象时,应考虑执行POST请求。查询字符串有一个基于浏览器的限制。当请求为POST类型时,数据将在请求正文中发送

这应该行得通

var saveDataObject =
{
        key: 124,
        transactionDescription:"My desc",
        transactionToType: [{
                               transactionKey: 111,
                               transactionTypeKey: 164,
                               transactionValue:23.34
                            }
                           ]
};

$.ajax({
    type:'post',
    url: '@Url.Action("updateTransaction","Transactions")',
    contentType:"application/json",
    data: JSON.stringify(saveDataObject)
}).done(function(e) {
    console.log(e);
});
确保使用[HttpPost]属性标记了操作方法

[System.Web.Mvc.HttpPost]
public ActionResult updateTransaction(TransactionSave transactionSave)
{
    return Json(transactionSave);
}

现在它将发送“application/json”作为ajax请求的contentType,js对象的json字符串化版本将在请求体中。模型绑定器将能够将发布的数据映射到您的对象

谢谢Shyju。我试过了,但似乎得到了同样的结果。我的网络选项卡告诉我请求方法是post now,我的数据作为表单数据传递,这似乎表明您建议的所有操作都已完成,但值仍然为0。在控制台日志中运行您的确切代码(更改回url,transactionToType中的值也为0。您使用的是什么版本的MVC?版本4。您的集合数据的格式必须为
transactionToType[0]。transactionToType键:1
(属性名称周围没有括号)。但您不应将集合发送到GET方法。除了丑陋的查询字符串外,它可能会超出查询字符串限制并引发异常
[System.Web.Mvc.HttpPost]
public ActionResult updateTransaction(TransactionSave transactionSave)
{
    return Json(transactionSave);
}