iT邦幫忙

0

關於jQuery傳遞陣列資料給WebApi的問題

你好,我的專案是 ASP.NET WebApi , 當我在頁面中使用 jQuery的 $.ajax() 傳遞陣列資料
到 WebApi Controller 的 Action 後,發現 Action 所接收的參數都是空值。

曾經在 $.ajax() 中設定 traditional: true 也是一樣。

前端頁面的 javascript 如下:

var testArry = ["Item01", "Item02", "Item03"];
$.ajax({
        url: 'http://192.168.1.106:8080/api/Test_MasterDetailForm/TestGetUser',                   
        type: 'POST',                   
        traditional: true,             
        data: { conditionStr: testArry }, 
        dataType: "json",
        cache: false, 
        async: false,
        beforeSend: function () { },
        error: function (errorCode) { window.alert("errorCode : " + errorCode); },
        success: function (resCode) { window.alert("resCode : " + resCode); }
      });

Controller 的 Action 如下:

[System.Web.Http.AcceptVerbs("GET", "POST")]
[System.Web.Http.HttpPost]
        
	public string TestGetUser(string[] conditionStr)
        {
            string result = "Your Data is "+conditionStr.Length.ToString();

            return result;
        }

$.ajax() 執行完後畫面上會顯示 "resCode : Your Data is 0"

代表Action 接收的參數conditionStr 是空值。

我用 Fiddler 顯示的是有把資料丟到 WebApi 裡去,值也是正確,有顯示陣列裡的三個元素資料。
$.ajax() 有執行 success 的函式,代表呼叫和執行上應當沒問題。

有人知道如何解決這個問題嗎?

2 個回答

4
player
iT邦大師 1 級 ‧ 2013-11-07 20:07:58
最佳解答

你可以看使用Asp.Net MVC打造Web Api (13) - 使用Json.Net解析Json這篇有沒有你要的?

我是用Using jqGrid’s search toolbar with multiple filters in ASP.NET MVC
在WebAPI的傳入參數的類別宣告去使用ModelBinder跑Json的DataContractJsonSerializer

現在有點麻煩的地方是,就算 Action 的參數是一個 string 變數,傳進去的時候還是一樣變成空值。但是我用 Fiddler 裡用 POST 傳資料,並且在 RequestBody 中 打上 ="Hello" , Action 卻可以成功的抓到參數。
感覺上 Action 似乎沒問題,我目前還沒查出問題到底出在哪。

我再補充一下,我現在把 Action 改成:

<pre class="c" name="code">public string TestGetUser([FromBody]string conditionStr)

在 ViewPage 中如原文透過 $.ajax() 傳一個字串給Action還是一樣會變成空值。
但是用 Fiddler 裡用 POST 傳資料,並且在 RequestBody 中 打上 ="Hello" , Action 卻可以成功的抓到參數。

4
丁丁 (Dean)
iT邦大師 6 級 ‧ 2013-11-08 10:12:45

請在 jQuery 加上

<pre class="c" name="code">contentType: "application/json; charset=utf-8",

並把 data 改成

<pre class="c" name="code">data: jsonData,

contentType: "application/json; charset=utf-8",

我之前是沒有定義 contentType: "application/json; charset=utf-8",
然後 jQuery 就一直 Parsing Failure

我要發表回答

立即登入回答