2014-02-18 15 views
2

我想發佈一個Javascript數組到WebAPI。發表Javascript數組到WebAPI

我有我的JavaScript數組一樣:

data: { staff: JSON.stringify(checkedStaff) }; 

我的WebAPI控制器是那麼喜歡:

public HttpResponseMessage Post([FromBody] formData data) 
{ 
    string string_group = String.Join(",", data.group); 
    string string_staff = String.Join(",", data.staff); 
} 

var checkedGroups = []; 
var checkedStaff = []; 

$.each(items, function() { 

    if (this.checked) { 
     type = dataAdapter.records[this.id - 1].VALUETYPE; 
     if (type == 'Staff') { 
      checkedStaff[checkedStaff.length] = this.value; 
     } else { 
      checkedGroups[checkedGroups.length] = this.value; 
     } 
    } 
}); 

我用這則發送該到我的WebAPI和我的formData類是這樣的:

public class formData 
{ 
    public Array group { get; set; } 
    public Array staff { get; set; } 
} 

按照上面的說法,我想將數組拆分成一個逗號delimerated字符串。

但在服務器端string_staff變量只是一個空字符串和我的JSON數據是這樣的:

staff: "["1"]" 
group: "" 

我不希望在陣列中使用的鍵/值類型要麼。

任何想法的?

+0

也許嘗試將您的組和員工屬性更改爲'string []'或'int []'而不是'Array'。 –

+0

嗨,是的,我確實有這個作爲字符串之前我發佈的問題,但沒有嘗試過的字符串[]明天將它放棄 – realtek

+0

WebAPI處理數據綁定的方式不同於MVC。試試這個'data:{'':myArray}',其中myArray有一個屬性給員工,一個給組。然後創建一個ViewModel(它有兩個數組屬性,一個用於工作人員,另一個用於組),然後將此傳入參數類型作爲您的方法。 – Nate

回答

0

將checkedGroups和checkedStaff變量更改爲對象文字。 JavaScript中的關聯數組並沒有像你試圖設置它的方式那樣真實。

var checkedGroups = {}; 
var checkedStaff = {}; 

$.each(items, function() { 

    if (this.checked) { 
     type = dataAdapter.records[this.id - 1].VALUETYPE; 
     if (type == 'Staff') { 
      checkedStaff[checkedStaff.length] = this.value; 
     } else { 
      checkedGroups[checkedGroups.length] = this.value; 
     } 
    } 
}); 

你可以讓他們爲數組,如果你這樣做:

checkedStaff.push(this.value); 
0

一般來說,你應該使用jQuery的AJAX功能$.ajax({ ... })張貼到的WebAPI控制器。我發現這種方法效果最好:

function postJSON(data) 
{ 
    return $.ajax({ 
    url: '/api/xyz', 
    type: 'POST', 
    data: JSON.stringify(data), 
    contentType: "application/json; charset=utf-8" // must have this option set 
    }); 
} 

function doSomethingElse() { 

    postJSON({ staff: checkedStaff, group: checkedGroup }) 
    .done(function(response) { ... }); 

}