Ale*_*lex 34 javascript c# ajax asp.net-mvc
我有一个像这样构造的ajax帖子:
var myData = [
{
id: "a",
name: "Name 1"
},
{
id: "b",
name: "Name 2"
}
];
$.ajax({
type: 'POST',
url: '/myurl/myAction',
data: { items: myData },
dataType: 'json',
error: function (err) {
alert("error - " + err);
}
});
Run Code Online (Sandbox Code Playgroud)
和一个MVC控制器:
[HttpPost]
public JsonResult MyAction(MyClass[] items)
{
}
Run Code Online (Sandbox Code Playgroud)
MyClass 只是数据的简单表示:
public class MyClass {
public string Name {get; set; }
public string Id {get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当javascript发出post请求时,控制器操作确实会收到2个项目,但这些项目中的属性(id,name)为null.
在fiddler中检查请求,正文如下所示:
Name | Value
items[0][Name] | Name 1
items[0][Id] | a
items[1][Name] | Name 2
items[1][Id] | b
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
Dar*_*rov 65
我错过了什么吗?
是的,请查看以下文章,以了解默认模型绑定程序对绑定集合所期望的正确的有线格式.换句话说,为了工作,而不是:
items[0][Name] | Name 1
items[0][Id] | a
items[1][Name] | Name 2
items[1][Id] | b
Run Code Online (Sandbox Code Playgroud)
你的有效载荷应该是这样的:
items[0].Name | Name 1
items[0].Id | a
items[1].Name | Name 2
items[1].Id | b
Run Code Online (Sandbox Code Playgroud)
不幸的是,使用jQuery实现此有效负载会非常令人沮丧.因此,如果您想使用AJAX将复杂对象/数组发送到服务器,我建议您使用JSON有效负载:
$.ajax({
type: 'POST',
url: '/myurl/myAction',
data: JSON.stringify({ items: myData }),
contentType: 'application/json',
error: function (err) {
alert("error - " + err);
}
});
Run Code Online (Sandbox Code Playgroud)
需要注意的事项:
data: JSON.stringify({ items: myData }) 代替 data: { items: myData }contentType: 'application/json'dataType: 'json'现在您的有效负载如下所示:
{"items":[{"id":"a","name":"Name 1"},{"id":"b","name":"Name 2"}]}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34585 次 |
| 最近记录: |