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

时间:2010-04-08 21:41:37

标签: jquery asp.net-mvc json

我想通过

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

我的行动

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

使用JSON的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并将它绑定到我的动作上的每个参数。我不需要将复杂类型与数据库绑定,只需简单的字符串,整数和布尔值。

3 个答案:

答案 0 :(得分:2)

我看到@womp根据我的反馈删除了他的答案,所以这里是解决方案。您可以将JSON对象作为数据参数传递。有关示例,请参阅here

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

答案 1 :(得分:0)

womp给了你很好的答案,但是如果你需要在几个动作上做这个,或者你想要更高级的绑定到复杂的对象,这篇文章可能有所帮助:

实施自定义过滤器:http://blogger.forgottenskies.com/?p=252

使用自定义模型绑定器:http://community.codesmithtools.com/blogs/tdupont/archive/2009/08/10/mvc-custom-json-binder.aspx

答案 2 :(得分:0)

粘合剂/过滤器非常好。为了更好地控制映射json名称< - >商家类属性,在属性上使用 [DataMember] 属性,在类上使用 [DataContract] 。请参阅DataContractJsonSerializer