你好,我的專案是 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 的函式,代表呼叫和執行上應當沒問題。
有人知道如何解決這個問題嗎?
你可以看使用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 卻可以成功的抓到參數。
請在 jQuery 加上
<pre class="c" name="code">contentType: "application/json; charset=utf-8",
並把 data 改成
<pre class="c" name="code">data: jsonData,