2013-04-27 38 views
1

我有多个参数,我必须传递给API控制器。如何从视图发送多个参数到API控制器在mvc4

我在做什么是

在我的javascript

  var routeInfo = JSON.stringify(routes); 
      var colors = JSON.stringify(colorsArray); 
      var times = JSON.stringify(mytimeArray); 
      var distances = JSON.stringify(myDistancArray); 
      var dir = $("#Direction").val(); 

      var fullString = routeInfo + ";" + colors + ";" + times + ";" + distances+";"+dir; 

      $.post("api/HomeToSchool/?route=" + fullString, 
       function (data) { 
        if (data = true) { 
         alert("Routes Saved Successfully"); 
        } 
        else if (data = false) { 
         alert("Routes are not saved"); 
        } 
       }); 

&在我的控制器

public bool PostHomeToSchoolRoutes([FromUri]string route) 
     { 
// my logic 
} 

在这里,我只是让 “routeInfo” &其他值的值不正在添加。 例如

var routeInfo = [["Børge,Brogade 38, 4100, Ringsted,09:25:00,55.43953, 11.79043","Grete,Sjællandsgade 27, 4100, Ringsted,09:25:00,55.44024, 11.78852","Else,Fynsgade 14, 4100, Ringsted,09:25:00,55.44128, 11.78595","Birthe,Eksercerpladsen 47, 4100, Ringsted,09:25:00,55.44954, 11.80309","Knud Lavard Centret, Eksercerpladsen 3, 4100, Ringsted,370,55.45014, 11.80474"]] 

       var colors = ["#886A52"] 
       var times = [7.97] 
       var distances = [3.36] 
       var dir = 0 

我在控制器得到的是

[["Børge,Brogade 38, 4100, Ringsted,09:25:00,55.43953, 11.79043","Grete,Sjællandsgade 27, 4100, Ringsted,09:25:00,55.44024, 11.78852","Else,Fynsgade 14, 4100, Ringsted,09:25:00,55.44128, 11.78595","Birthe,Eksercerpladsen 47, 4100, Ringsted,09:25:00,55.44954, 11.80309","Knud Lavard Centret, Eksercerpladsen 3, 4100, Ringsted,370,55.45014, 11.80474"]];[" 

其他值不来了。 我在这里做什么错。

+0

HomeToSchool是控制器名称&PostHomeToSchoolRoutes是该控制器中的方法。 – 2013-04-27 13:04:02

+0

没有注意到我们不应该在这种情况下使用JSON.stringify,而是让jquery为我们序列化参数。有三件事情要检查:不要使用JSON.stringify,添加“传统:真实”,并确保“路线”JavaScript数组是一维的。看看我的更新回答下面(测试) – 2013-04-28 01:51:03

回答

2

恐怕你的网址太长(> 255个字符),你可以试试这个。

$.ajax({ 
    type: 'POST', 
    url:"api/HomeToSchool", 
    data:{routeInfo:routes,colors:colorsArray,times:mytimeArray,distances:myDistancArray,dir:dir}, 
    dataType: "json", 
    traditional:true, 
    function (data) { 
         if (data = true) { 
          alert("Routes Saved Successfully"); 
         } 
         else if (data = false) { 
          alert("Routes are not saved"); 
         } 
        } 
}); 

和控制器:

public bool PostHomeToSchoolRoutes(string[] routeInfo,string[] colors,double[] times,double[] distances,int dir) 
     { 
// my logic 
} 

我看到你正在使用的二维数组routeInfo。但只有1个项目,我认为你应该将其更改为1维阵列,以使其与控制器代码兼容string[] routeInfo

+0

它不适合我 – 2013-04-27 12:49:28

+0

我刚刚更新了我的答案关于你的二维数组routeInfo – 2013-04-27 12:50:44

+0

尝试更新时间,距离,数据类型的数据类型到正确的数据类型。看到我更新的答案。 – 2013-04-27 13:10:40

2

远不止这些信息进入URL这里,不仅仅是你没有正确地追加参数他们一起需要使用&而不是;进行分隔。

最重要的是,您并不真正利用这里的MVC功能。在客户端,您希望将您的信息作为集体对象发送,而不是单独的参数,例如

var schoolRoutes = { 
    routes: routes, 
    colors: colorsArray, 
    times: mytimeArray, 
    distances: myDistanceArray, 
    direction: $("#Direction").val() 
}; 

$.ajax({ 
    type: 'POST' 
    url: "api/HomeToSchoolRoutes", 
    data: JSON.stringify(schoolRoutes), 
    dataType: "json", 
    success: function (data) { 
     if (data = true) { 
      alert("Routes Saved Successfully"); 
     } 
     else if (data = false) { 
      alert("Routes are not saved"); 
     } 
}); 

然后在服务器端,推出将能够绑定到输入数据也叫做ViewModel

public class RouteInfoViewModel 
{ 
    ... 
} 

public class SchoolRoutesViewModel 
{ 
    public RouteInfoViewModel[] Routes { get; set; } 
    public string[] Colours { get; set; } 
    public double[] Times { get; set; } 
    public double[] Distances { get; set; } 
    public string Direction { get; set; } 
} 

然后更新您的行动,预计这一特定ViewModel一类,应该给你获取所有发布的信息。

public bool PostHomeToSchoolRoutes(SchoolRoutesViewModel schoolRoutes) 
{ 
    ... 
} 
+0

然后在服务器端,引入一个能够绑定到传入数据的类,也就是ViewModel,Didnt对此行有所了解。 – 2013-04-27 20:15:19

+0

只要MVC参数包含相关属性,就可以自动映射到类。因此,定义一个类并为其提供您期望从客户端接收到的属性,并将该操作的参数设置为该属性。我举了一个例子 – James 2013-04-27 23:47:57

相关问题