我有一个' ViewModel'我想转到我的行动,它看起来像这样:
public class MyClass
{
public int Id { get; set; }
public int MyNumber { get; set; }
}
public class RequestViewModel
{
public List<MyClass> MyClasses { get; set; }
public int AnotherNumber { get; set; }
}
在javascript中,我定义了我的数据:
var actionRequest = {
MyClasses: [
{
Id: 1,
MyNumber: 30
},
{
Id: 2,
MyNumber: 40,
}
],
AnotherNumber: 12
};
我打电话:
$.ajax({
type: "Get",
url: " /Controller/MyAction",
data: actionRequest,
dataType: "json",
traditional: true,
success: function (data) {
// Good stuff
},
error: function (data) {
// Bad stuff
}
});
我的行动签名:
public ActionResult MyAction(RequestViewModel request)
在检查request
(我的操作已成功点击)时,会填充AnotherNumber
,而我的MyClass
集合为null
。
我在这里遗漏了一些明显的东西,我只是不知道是什么。
到目前为止,我真的非常感谢这些建议和答案,但没有(到现在为止)有效,所以现在我要安排:
public class RequestViewModel
{
public int[] MyClassIds { get; set; }
public int[] MyNumberValues { get; set; }
public int AnotherNumber { get; set; }
}
这样做感觉太可怕了,但现在这个项目背后有一点紧迫感,所以我必须选择合适的方式。
答案 0 :(得分:3)
尝试下面的代码,并将名称与控制器中的名称相同,如下所示: -
$.ajax({
type: "POST",
url: " /Controller/MyAction",
data: :{ request : JSON.stringify(actionRequest) },
dataType: "json",
traditional: true,
success: function (data) {
// Good stuff
},
error: function (data) {
// Bad stuff
}
});
我建议尝试POST请求把httpPost属性放在动作方法之上,如下所示: -
[HttpPost]
public ActionResult MyAction(RequestViewModel request)
答案 1 :(得分:1)
尝试使用JSON.stringify
并将ajax请求中的data
修改为:
data:{ request : JSON.stringify(actionRequest) }
并在您的ajax请求中添加contentType: "application/json"
。
或试试这个:
var request = {
MyClasses: [
{
Id: 1,
MyNumber: 30
},
{
Id: 2,
MyNumber: 40,
}
],
AnotherNumber: 12
};
request = JSON.stringify({ 'request': request });
现在以这种方式在ajax请求中使用data
:
data: request
答案 2 :(得分:0)
我不确定区别在哪里,现在我无法重现错误,但这对我有用。
public class MyClass
{
public int Id { get; set; }
public int MyNumber { get; set; }
}
public class RequestViewModel
{
public List<MyClass> MyClasses { get; set; }
public int AnotherNumber { get; set; }
}
[HttpPost]
public ActionResult Save(RequestViewModel actionRequestX)
{
return null;
}
var actionRequest = {
MyClasses: [
{
Id: 1,
MyNumber: 30
},
{
Id: 2,
MyNumber: 40
}
],
AnotherNumber: 12
};
$.ajax({
type: "POST",
url: "/Home/Save",
contentType: "application/json, charset=utf-8",
data: JSON.stringify({ actionRequestX: actionRequest }),
dataType: "json",
traditional: true,
success: function (data) {
// Good stuff
},
error: function (data) {
// Bad stuff
}
});
});