我的控制器中有一个动作结果函数,它是通过AJAX POST从客户端调用的。它过去只接受一个复杂的参数,工作正常。由于我有更多的要求,我现在需要它采取2个复杂的参数。使用2个参数模型Binder似乎无法以正确的方式序列化传入的数据(我得到了空值)。传入的参数在字符串化版本中应该是什么样的?
例如:
public ActionResult Bla(Person p, Car c)
{}
public class Person
{
public string FirstName;
public string LastName;
}
public class Car
{
public string Make;
public string Model;
}
我曾经只发送过1个字符串化的JSON对象(例如Person)。现在我试图将Person和Car粘合到一个JSON对象中。这是我出错的地方吗?
我按以下方式构建JSON对象:
var person= {};
person['FirstName'] = 'Bob';
person['LastName'] = 'Jones';
//now same for c
var params = JSON.stringify({ 'p': person, 'c': car});
$.ajax({
url: '/Controller/bla',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: params,
//and so on
我尝试了其他几种构建这些参数的方法,但它们似乎也没有用。
答案 0 :(得分:1)
这里的诀窍是真正检查firebug中发布的内容:
您希望参数看起来像:
person.FirstName
如果你发布像
这样的对象 var personData = {
FirstName: "First",
LastName: "Last"
};
$.ajax({
type: "POST",
url: "/Product/Bla",
data: personData
})
});
您的参数看起来像
person[FirstName]
一种简单的方法是使用Nick Frost的插件更改发布的参数
http://www.nickriggs.com/posts/post-complex-javascript-objects-to-asp-net-mvc-controllers/
答案 1 :(得分:0)
您可以将它们作为json对象传递给2个不同的属性(操作中定义的名称)。
这样的事情,你不必stringify
它只是传递它,如下所示,jQuery将负责它。
$.ajax({
url:"../Controller/bla",
contentType: "application/json",
data: {
p: {
FirstName: "FristName",
LastName: "LastName"
},
c: {
Make: "Make",
Model: "Model"
}
},
success: function(){
}
});