MVC 4では、AJAXを使用して、ビューのJavaScript配列をコントローラーの関数にどのように渡しますか?
これはうまくいかないようです:
_$.ajax(
{
type: "POST",
url: "../Home/SaveTable",
data: { function_param: countryArray }
});
_
問題は、countryArrayがJavaScriptビューのグローバル配列であり、渡される前に要素が含まれていることを確認したことです。ただし、saveTable関数が配列を受け取ると、関数はnull string []配列を受け取ったと言います。
ControllerからViewに配列を渡すと、複雑なデータ型をreturn Json(data, JsonRequestBehavior.AllowGet);
でシリアル化し、次にそれを「var」変数。
だから私もおそらくこれのためにそれをしなければならないでしょうが、どうすればいいですか?
編集1:
SaveTable関数の短縮版を次に示します。
_public string SaveTable(string[] function_param)
{
if (function_param != null && function_param > 0)
{
//some code
return "Success";
}
//The following code will run if it's not successful.
return "There must be at least one country in the Region.";
//Yeah it's always returning this b/c function_param is null;
}
_
配列をシリアル化する場合は、traditional: true
を設定する必要があります。
$.ajax({
type: "POST",
traditional: true,
url: "../Home/SaveTable",
data: { function_param: countryArray }
});
traditional: true
が行うことについて、この良い説明が見つかりました: https://stackoverflow.com/a/5497151/2419531
編集:
traditional: true
を使用したくない場合は、JSON.stringify
を使用し、contentType
を指定して、データを文字列として渡すことができます。
$.ajax({
type: "POST",
url: "../Home/SaveTable",
contentType: 'application/json',
data: JSON.stringify({function_param: countryArray}),
});
あなたのAjax:
$.ajax({
type: "POST",
url: "../Home/SaveTable",
contentType: 'application/json',
data: {function_param: JSON.stringify(countryArray)},
});
あなたのコントローラーで:
using Newtonsoft.Json;
public string SaveTable(string function_param)
{
dynamic func_param = JsonConvert.DeserializeObject(function_param)
}
その後、コントローラーでforeachを実行できます。
あなたはあなたのコントローラーで使うべきです:
public string SaveTable(object[] function_param)
{
//some code
}
仕事をする必要があります、それは将来のユーザーのためです。