web-dev-qa-db-ja.com

C#MVC 4:ビューのJavaScript配列をコントローラーに渡す

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;         
 }
_
12
RedAces

配列をシリアル化する場合は、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}),
});
22
Saravana

あなたの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
}

仕事をする必要があります、それは将来のユーザーのためです。

2
LP. Gonçalves