2013-03-19 82 views
0

我有一个MVC JSON控制器方法,我从前端调用。它看起来像这样:关键值对列表的JSON表示

public JsonResult FacetedSearch(string searchString, List<KeyValuePair<string,string>> facets)

我通过jQuery AJAX调用它的前端,我序列化以下列方式中的数据:

JSON.stringify({searchString: "the matrix", facets: [{Key: "TypeName", Value: "Feature Film"}, {Key:"TypeName", Value:"Series"}]}

当我调试通过我的应用程序代码,我看到searchString被成功传递给MVC方法,但变量facets给了我一个2 KeyValuePair的列表,其中包含空键和值。

我看过我的序列化,它似乎有效,但无论出于何种原因,它不会正确地转到我的应用程序。是什么赋予了?

+0

你传递一切ASP作为一个JSON对象,但你的方法需要两个参数。 – bfavaretto 2013-03-19 18:22:04

回答

1

而不是期望签名中有两个对象,期望一个包含两个参数的单个对象会更有意义。这将如下所示。

public JsonResult FacetedSearch(RequestObject requestObject) 
{ } 

public class RequestObject 
{ 
    public string searchString { get; set; } 
    public List<KeyValuePair<string,string>> facets { get; set; } 
} 

这样,当您发送JSON对象时,签名是一个具有两个属性的对象,就像您要发送的对象一样。

+0

这没有奏效。值仍然为空。 – 2013-03-19 19:14:59

+0

@JaySun与其调用JSON.stringify,如果使用值创建对象会发生什么情况?它在那时对你的控制器有用吗? – 2013-03-19 19:21:02

+0

然后我得到一个无效的JSON原始错误。 – 2013-03-19 19:24:08