如何在控制器方法参数中获取通过.getJSON方法传递的值数组

时间:2014-04-25 23:16:16

标签: jquery asp.net-mvc-3

我有以下jquery代码,

 var ids = []
 var id ={"Param1": 1, "Param2": 2, "Param3": 3}
 ids.push(id)
 var id ={"Param1": 3, "Param2": 2, "Param3": 6}
 ids.push(id)

 $.getJSON("/Controller/Action1",
            {
                str: ids
            }
            , function (data) {
       });

  public JsonResult Action1(string[] str)
    {

        return Json("Success", JsonRequestBehavior.AllowGet);

    }

我知道字符串数组不正确。什么是正确的参数类型来获取从jQuery传递的集合。

提前致谢!!

3 个答案:

答案 0 :(得分:0)

对于您的Action尝试使用FormCollection而不是查看Key和Item集合

public JsonResult Action1(FormCollection ids)
{
      //ids["Param1.[0]"] <--Just off the top of my head, I think this is what the key name would be.
      //ids.AllKeys <--Use this to see the actual key names.
}

答案 1 :(得分:0)

您正在传递一个对象的数组,如何在字符串中解析它。

试试这个

创建具有您想要传递的相同属性的类。

public class Test
{
 public int Param1{get;set;}
 public int Param2{get;set;}
 public int Param3{get;set;}
}

Jquery的

var Tests= []
 var Test={"Param1": 1, "Param2": 2, "Param3": 3}
 Tests.push(id)
 var Test={"Param1": 3, "Param2": 2, "Param3": 6}
 Tests.push(id)


$.getJSON("/Controller/Action1",
            {
                Tests: JSON.stringify(Tests)
            }
            , function (data) {
       });

  public JsonResult Action1(IList<Test> Tests)
    {

        return Json("Success", JsonRequestBehavior.AllowGet);

    }

答案 2 :(得分:0)

您正在尝试将对象集合发送到控制器,请尝试按照以下步骤实现:

 var data = {};
  data["ids[0].Param1"] = 1
  data["ids[0].Param2"] = 2
  data["ids[0].Param3"] = 3

  data["ids[1].Param1"] = 3
  data["ids[1].Param2"] = 2
  data["ids[1].Param3"] = 6

 $.getJSON("/Controller/Action1",data           
            , function (response) {
       });

然后在你的控制器中创建一个模型,以便你可以绑定到该模型的集合:

public class MyModel
  {
    public int Param1{get;set;}
    public int Param2{get;set;}
    public int Param3{get;set;}
  }


    public JsonResult Action1(IList<MyModel> ids)
        {

            return Json("Success", JsonRequestBehavior.AllowGet);

        }