【解決方法】ajax から MVC コントローラーに配列を渡す

プログラミングQA


やあ、
JS 配列を MVC コントローラーに渡そうとしています。 同じコードを使用することで、API コントローラーでも同じことができました。 しかし、MVC コントローラーを使用して同じことを行うことはできません。

誰でも助けてください

これはJS側です

JavaScript
function GetColumnmappingValue() {
    var columnMappings = [];
    var count = 0;
    $('.row').each(function () {
        if (count > 0) {
            var sourceColumn = "";
            var destinationColumn = "";
            var sourceColumnIndex = "";

            $(this).find(".column").each(function () {

                var input = $(this).find("select").each(function (i) {
                    if (sourceColumn == "") {
                        sourceColumn = $(this).find("option:selected").text();
                        sourceColumnIndex = $(this).find("option:selected").val();
                    }
                    else {
                        destinationColumn = $(this).find("option:selected").text();
                    }
                });
            });

            //if (sourceColumn.toLowerCase() != "select" && destinationColumn.toLowerCase() != "select")
            columnMappings.push({ SourceColumnIndex: sourceColumnIndex, SourceColumn: sourceColumn, DestinationColumn: destinationColumn });
        }
        count++;
    });


    $.ajax({
        type: "POST",
        url: "/ExcelImport/SaveMappings",
        data: { '': columnMappings },
        dataType: "json",
        success: function () { alert("Mapping Successful") },
        failure: function () { alert("not working..."); }
    });

}

そしてこれがコントローラー

C#
[HttpPost]
        public IEnumerable<ColumnMapping> SaveMappings(IEnumerable<ColumnMapping> columnMappings)
        {
            // do some registration work
            CreateXML(columnMappings);
            return columnMappings;
        }

問題は、配列カウントを取得していることですが、その中のすべての値が null ..

ありがとう
アルジュン・メノン

解決策 1

MVC は Newtonsoft を使用して逆シリアル化するため、これらの結果が表示されます。 配列があることは認識していますが、オブジェクト キーが null にマップされているため、値を割り当てる方法がわかりません。

JSON を修正すると、これは正常に機能するはずです。

JavaScript
$.ajax({
           type: "POST",
           url: "/ExcelImport/SaveMappings",
           data: { columnMappings: columnMappings },
           dataType: "json",
           success: function () { alert("Mapping Successful") },
           failure: function () { alert("not working..."); }
       });

これは、jquery を使用した MVC 実装で機能します。

解決策 2

JavaScript
var Mapping= new Object();
Mapping.Column1= "EmployeeID";
Mapping.Column2= "Name";
Mapping.Column3= "Salary";


var param = new Object();
paramArray.columnMappings= new Array();
paramArray.columnMappings.push(Mapping);

$.ajax({
        type: "POST",
        url: "/ExcelImport/SaveMappings",
        data: JSON.stringify(paramArray),
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function () { alert("Mapping Successful") },
        failure: function () { alert("not working..."); }
});

解決策 3

これはうまくいきますか?mvcビューからコントローラーにリストデータを送信して挿入したい場合は、sugestaion plzを再生します

function save(CART_NO, CATRIDGE) {
アラート(‘こんにちは’);
var 日付 = {
カート番号: 100,
カートリッジ: 「安全」
}
$.ajax({
タイプ: ‘ポスト’,
url: ‘@Url.Action(“saveDetails”, “ホーム”)’,
データ: JSON.stringify(データ),
データ型: “json”,
contentType: ‘アプリケーション/json’,
成功: 関数 (応答) {
アラート(「成功」);
}、
失敗: 関数 (応答) {
}、
エラー: 関数 (応答) {
}、
});
}

[HttpPost]

public JsonResult saveDetails(Catridges_Model Catridges_Model)
{
var Result = service.saveDetailsCheckWise(カートリッジ_モデル);
Json(結果、JsonRequestBehavior.AllowGet) を返します。

}

コメント

タイトルとURLをコピーしました