2011-11-26 70 views
8

我有JS中的字符串數組。所有的成員實際上都是數字。
我的控制器有一個int []參數。JS int數組到MVC3控制器

我從jQuery的發送:

$.ajax({url: someUrl, data: {ids : JSON.stringify(id_array) }, ...) 

,我又把它使用

public ActionResult MyAction(int[] ids) { ... 

參數沒有得到填補,我已經檢查收到的Request.Form["ids"]包含「[\"25\",\"26\"]",字符串JSON數組的代表 有沒有什麼辦法可以自動做到這一點沒有很多int解析?

回答

11

您是否嘗試過不字符串化的陣列,讓MVC的默認模型綁定做魔術

$.ajax({url: someUrl, data: {ids : id_array }, ...) 

我敢肯定.NET MVC會看到陣列,看看它是int數組並將其映射到您的型數組正確

+0

是,的Request.Form [ 「IDS []」]將具有值 「25,26」,INT [ ]仍然沒有約束力。 – TDaver

+11

@TDaver根據http://api.jquery.com/jQuery.param/以及 –

+1

所有我缺少的是傳統的標誌,您需要將.ajax「traditional」屬性設置爲true才能使淺數組序列化正確工作。謝謝 – TDaver

0

您需要使用

$.ajax({ 
    url: someUrl, 
    data: id_array.map(function(item){ return {name:'ids',value:item}; }) 
}) 

這是因爲,以獲得對後端的列表,所需要的數據的形式被髮送ids=3&ids=5&ids=1&ids=7


對於不支持.map使用

function arrayToParamObject(name,array){ 
    var obj = []; 
    for (var i = 0, len = array.length; i< len; i++){ 
     obj.push({name: name, value: array[i] }); 
    } 
    return obj; 
} 

,並用它

$.ajax({ 
    url: someUrl, 
    data: arrayToParamObject('ids', id_array) 
}) 
4

您可以用兩種不同的方式

1.使用$做到這一點的IE版本。 ajax將數據發佈到您的動作

$.ajax({ 
    url: '/myController/myAction', 
    dataType: 'json', 
    type: 'POST', 
    contentType: 'application/json; charset=utf-8', 
    traditional: true, 
    data: $.toJSON(json), 
    success: function (data, textStatus, jqXHR) { 
    ... 
    } 
}); 

你的行動應該是這樣的一個

public class myController 
{ 
    [HttpPost] 
    public ActionResult myAction(List<int> json) 
    { 
     .... 
    } 
} 

2.使用.post的$來發表您的數據

$.post(
    '/myController/myAction', 
    { json: $.toJSON(products) }, 
    function (data) { 
    ... 
}); 

在你的行動,你應該反序列化JSON字符串

public class myController 
    { 
    public ActionResult myAction(string json) 
    { 
     JavaScriptSerializer serializer = new JavaScriptSerializer(); 
     List<int> list = serializer.Deserialize<List<int>>(json); 
    } 
} 

您需要下載和包含jquery.json-2.2.min.js到您的代碼。

http://code.google.com/p/jquery-json/downloads/detail?name=jquery.json-2.2.min.js

+0

這是比我想要的方式更少自動化... – TDaver

11

對於MVC3需要jQuery的配置爲使用傳統的, 「淺」 序列。請參見here

客戶端AJAX請求:

jQuery.ajaxSettings.traditional = true; //enable "shallow" serialisation globally 
$.get("someUrl", {ids : id_array }); 

處理法:

public ActionResult MyAction(string[] ids) { ... } 
+0

謝謝!我會接受Keith.Abramo的,儘管他是第一個 – TDaver