将 JSON 对象传递给 MVC
Passing JSON object to MVC
我遇到了一个简单的问题,需要很长时间才能弄清楚。我似乎无法从 JS 获取数据到 MVC。
JS:
var stuff = [{a: 1, b: "Low"}, {a: 5, b:"High"}];
$.ajax({
url: '@Url.Action("Action")',
type: 'POST',
data: JSON.stringify({ stuff: stuff }),
traditional: true
});
MVC
public enum Level
{
High = 10,
Normal = 5,
Low = 1
}
...
public class MyModel
{
public int a { get; set; }
public Level b { get; set; }
}
...
public ActionResult Action(List<MyModel> stuff){
//stuff is always null no matte what I try?
....
}
我不确定我的问题到底出在哪里,因为这很难调试。
我刚刚意识到这是问题所在:
data: JSON.stringify({ stuff: stuff })
改为:
data: JSON.stringify(stuff)
在您的 ajax 调用中指定 contentType
属性,它应该可以正常工作。
当使用 $.ajax 向服务器发送数据时,默认的 contentType 值为 "application/x-www-form-urlencoded; charset=UTF-8
" 。由于我们要发送 JSON 数据,我们应该指定它。
var stuff = [{a: 1, b: "Low"}, {a: 5, b:"High"}];
$.ajax({
url: '@Url.Action("Action")',
type: 'POST',
data: JSON.stringify({ stuff: stuff }),
contentType:"application/json", //This is the new line
traditional: true
}).done(function(res) {
console.log("Result came back");
});
我遇到了一个简单的问题,需要很长时间才能弄清楚。我似乎无法从 JS 获取数据到 MVC。
JS:
var stuff = [{a: 1, b: "Low"}, {a: 5, b:"High"}];
$.ajax({
url: '@Url.Action("Action")',
type: 'POST',
data: JSON.stringify({ stuff: stuff }),
traditional: true
});
MVC
public enum Level
{
High = 10,
Normal = 5,
Low = 1
}
...
public class MyModel
{
public int a { get; set; }
public Level b { get; set; }
}
...
public ActionResult Action(List<MyModel> stuff){
//stuff is always null no matte what I try?
....
}
我不确定我的问题到底出在哪里,因为这很难调试。
我刚刚意识到这是问题所在:
data: JSON.stringify({ stuff: stuff })
改为:
data: JSON.stringify(stuff)
在您的 ajax 调用中指定 contentType
属性,它应该可以正常工作。
当使用 $.ajax 向服务器发送数据时,默认的 contentType 值为 "application/x-www-form-urlencoded; charset=UTF-8
" 。由于我们要发送 JSON 数据,我们应该指定它。
var stuff = [{a: 1, b: "Low"}, {a: 5, b:"High"}];
$.ajax({
url: '@Url.Action("Action")',
type: 'POST',
data: JSON.stringify({ stuff: stuff }),
contentType:"application/json", //This is the new line
traditional: true
}).done(function(res) {
console.log("Result came back");
});