2013-04-27 40 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

相關問題