0

複数選択機能を使用して複数の行を選択し、コントローラーに渡します。javascriptは以下のとおりです。

onClickButton: function (ids) {

var grid = $("#employee");
var rowid = grid.jqGrid('getGridParam', 'selarrrow');

var count = rowid.length;
var rowData;
var colData = [];

for (var i = 0; i < count; i++) {
   rowData = $("#employee").getRowData(rowid[i]);
   colData[i] = rowData.ID;
                            }

$.ajax({
    type: 'POST',
    url: '/Home/Create/' + colData,
   //data: { id: colData },
    dataType: "json"
    });
}

私のコントローラーのアクションは以下のとおりです。

public ActionResult Create(string id){
JavaScriptSerializer ser = new JavaScriptSerializer();
var myList = ser.Deserialize<List<string>>(id);}

colDataを配列として作成し、現在4つのID(“ 102,103,104,105”)を追加しています。colDataをデバッグして確認すると、「102,103,104,105」が含まれています。次に、それを文字列としてコントローラーアクションに渡し、逆シリアル化します。デシリアライズすると、「無効なJSONプリミティブ:103,104,105」と文句を言います。

他の投稿を見たことがありますが、私の問題に関連するものは見つかりませんでした。「data:{id:colData}」を使用してcolDataを渡すと、idはnullとして返されます。

この問題を理解するのを手伝ってください、私はこれで立ち往生しているのは久しぶりです。どんな提案でも大歓迎です。

4

3 に答える 3

4

ajax呼び出しを介してデータを送信する場合は、次のようにデータを文字列化する必要があります

$.ajax({
        type: 'POST',
        url: '@Url.Action("AddMe")',
        contentType: 'application/json; charset=utf-8',
        data:JSON.stringify({Id: colData}),
        dataType: "json",
success:function(){
       //do sth here
         }

         error: function () {
//do sth here
        }

        }); 

これがお役に立てば幸いです。

于 2012-07-31T02:47:04.420 に答える
1

私はその問題の解決策を見つけました。colDataを配列として送信する代わりに、Json.stringifyを使用して、以下のようにそれらを文字列としてコントローラーに渡します。

var data = Json.stringify(colData);

次に、「データ」をコントローラーに渡します。コントローラアクションはそれでも文字列として取得する必要があり、「id」を逆シリアル化すると文字列のリストが適切に返されます。

于 2012-07-31T02:42:11.013 に答える
0

次の形式のjsonstringを試してみます。

var jsonstring = {idarray:[{"value":"102"},{"value":"103"}]}

コードビハインド:

    public class Idarray
{
    public string value { get; set; }
}

public class RootObject
{
    public List<Idarray> idarray { get; set; }
}
于 2012-07-30T21:33:59.047 に答える