数组值从 JS 丢失到控制器
Posted
技术标签:
【中文标题】数组值从 JS 丢失到控制器【英文标题】:Array Values Are Lost From JS To Controller 【发布时间】:2020-03-04 12:15:18 【问题描述】:我正在尝试将数组值从我的 javascript 传递到我的 C# 控制器。我使用 console.log();并验证在 JavaScript 方面的值是否完全符合预期。
但是,当我在控制器端 (C#) 添加断点时 - 它显示 updateData: Count = 0。为什么我要从有结果的 JavaScript 转到没有结果的 C#?
$('#UpdateDB').click(function ()
console.log(JSON.stringify( updateData: updateData ));
$.ajax('https://localhost:44328/api/DBUpdate',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: updateData: updateData ,
dataType: "json",
success: function (r)
alert("save successfully!");
);
);
[Route("api/DBUpdate")]
public ActionResult UpdateDB(List<TLSModel> updateData)
return Json(new status = "success", message = "Records saved successfully" );
编辑 这就是我的 TLSModel 的样子
public class TLSModel
[Key]
public int ID get; set;
public double StoreNumber get; set;
public string StoreName get; set;
public bool ActiveStore get; set;
【问题讨论】:
只要传入ajax data:JSON.stringify( updateData: updateData )
@jishansiddique - 同样的问题。当它碰到我的控制器时,计数 = 0。
【参考方案1】:
问题是模型绑定器需要一个列表,而查看您的 cmets 您正在发送一个具有列表属性的对象。只发送数组就可以了。
这是一个有效的例子。
var updateData = [ storeNumber: "2059", activeStore: false , storeNumber: "2005", activeStore: false ];
$('#UpdateDB').click(function ()
$.ajax('https://localhost:44328/api/DBUpdate',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(updateData),
dataType: "json",
success: function (r)
alert("save successfully!");
);
);
【讨论】:
【参考方案2】:尝试检查您的数据类型以获取此函数的参数:
public ActionResult UpdateDB(List<TLSModel> updateData)
List<TLSModel>
可能无法正确匹配/映射到您传递给 C# 的模型。
试试Array<TLSModel>
如果确实在 C# 代码中遇到了断点,那么路由就没有问题,所以这是一个好的开始。
我会尝试看看你是否可以将该 updateData 对象传递给任何控制器函数,然后看看如果你只将一个字符串传递给任何控制器函数会发生什么,这可能有助于缩小范围。
【讨论】:
这是我的 console.log();我是否以错误的格式发送它?"arraCheck":["storeNumber":"2059","activeStore":false,"storeNumber":"2005","activeStore":false]
@JamesL 您应该将发布的内容作为模型添加到您的问题中。这很可能是问题所在。另外,请确保它与发布的内容完全相同,而不是对数据的解释。
@CPerson - 你的意思是 console.log() 产生了什么?
如果我将它转换为 ArrayThe Non-Generic Type Array can not be used with type arguments
你确认updateData是JS中的数组了吗?
否则在您的 ajax 帖子中尝试
data: updateData: [updateData]
【讨论】:
这是我的 console.log();我是否以错误的格式发送它?"arraCheck":["storeNumber":"2059","activeStore":false,"storeNumber":"2005","activeStore":false]
您发送的型号在我看来是错误的。尝试发送这个而不是 updateData 变量:var tlsArray = [ ID: 0, StoreNumber: 12, StoreName: 'name', ActiveStore: true , ID: 1, StoreNumber: 13, StoreName: 'name2', ActiveStore:真];
如果我更改我的 updateDB 按钮中的数据,点击读取像这样data: "arraCheck": [ "storeNumber": "2059", "activeStore": false , "storeNumber": "2005", "activeStore": false ] ,
当我在我的控制器代码中击中断点时它仍然为空
arraCheck 从何而来?使用我的输出inspelad。应该工作【参考方案4】:
也许这会有所帮助:
https://dotnetfiddle.net/cGay3Y
虽然我注意到我的示例中的数组对象看起来像这样:
["storeNumber":"2059","activeStore":false,"storeNumber":"2059","activeStore":false]
【讨论】:
我将控制器方法更改为像这样UpdateDB(TLSModel[] updateData)
- 但仍然是同样的问题,当我将鼠标悬停在控制器中的 updateData 上时,它显示 Count = 0...当我到达我的控制器代码时,我将如何迭代 updateData 以确认它包含的数据?
您是否尝试在我的示例中复制确切的代码(全部),看看是否至少有效(意思是,count 不为 0)?以上是关于数组值从 JS 丢失到控制器的主要内容,如果未能解决你的问题,请参考以下文章
在 codeigniter 中,如何将数组值从控制器传递到同一视图页面?