如何将JSON对象传递给MVC操作参数?

5

我想要通过

{"id":1, "name":"stackoverflow", "parameter2":false, "parameter3":true}

针对我的行动

public JsonResult Action(int id, string name, bool parameter2, bool parameter3)
{
    //...
}

使用jQuery的ajax方法,并将JSON作为数据参数。
$.ajax({
   url: "target.aspx",
   data:  {"id":1, "name":"stackoverflow", "parameter2":false, "parameter3":true},
   success: handleResponse
});

我能在Fiddler中看到我的JSON对象被发送了,但它们没有绑定到我的操作参数上。我该如何使它们绑定到参数上?
我不想在操作中绑定一个包含我的值的对象,即我不想使用Action(MyCustomObjectToAcceptParameters json)。我希望每个JSON属性都绑定到操作的每个参数上。
如果我将参数作为查询字符串传递,一切都正常,但是与一堆查询字符串值相比,JSON更容易构建/维护,因此我希望有一种方法将我的JSON绑定到我的操作的每个参数上。我不需要绑定带有数据成员的复杂类型,只需要简单的字符串、整数和布尔值。

你能发布一下你当前的jQuery调用代码吗? - tzaman
你有没有尝试在变量名上去掉引号?看看 @Ryan 给出的答案。如果我理解正确的话,那应该能达到你想要的效果。 - SlackerCoder
3个回答

2

我看到@womp根据我的反馈删除了他的答案,所以这里提供解决方案。你可以将JSON对象作为data参数传递。点击这里查看示例。

$.ajax({
   url: "target.aspx",
   data: {parameter1: true, parameter2: false, parameter3: true},
   success: handleResponse
 });

如果您已经完成了这个步骤,您可以使用Firebug确认参数是否实际上在请求中。或者您可以在控制器中设置断点并检查HttpContext。 - Ryan
这是我传递参数的方式,但是如何将它们绑定到我的操作参数(而不是操作参数的对象)? - TimTam
1
您是否正在使用默认的模型绑定器?这应该可以正常工作。 - Ryan
是的,我正在使用默认模型绑定器。当我将参数作为查询字符串格式的URL的一部分传递时,它可以工作。当我通过数据对象传递JSON时,它无法工作。 - TimTam

0

0

绑定器/过滤器非常优秀。如果想要更精细地控制json名称与业务类属性之间的映射关系,请在属性上使用[DataMember]属性,在类上使用[DataContract]属性。请参阅DataContractJsonSerializer


这似乎是对象属性的绑定。我想将其绑定到操作参数上(这样我就不需要创建另一个对象了)。 - TimTam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接