2

ASP.NET MVC3、AJAX、および JQUERY の使用に問題があります。私は次の機能を持っています

[HttpPost]
public bool Update(int id, FormCollection collection)

これは私のjQueryソースです:

$(document).ready(function () {
    $('#btnUpdate').click(function (e) {
        // Cancel default action
        e.preventDefault();
        var formCollection = $('#formId').serialize();
        $.ajax({
            cache: false,
            type: 'POST',
            url: '@Url.Action("Action","Controller")',
            data: { id: $('#id').val(), collection: formCollection },
            success: function (data) {
                alert(data);
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert('Error during process: \n' + xhr.responseText);
            }
        });
    });
});

id パラメータは正常に送信されましたが、コレクション (FormCollection) には {[0]: 10000, [1]: collection} の配列が含まれています。問題を解決できません。次のようにソリューションを再設計すると:

[HttpPost]
public bool Update(FormCollection collection)

$(document).ready(function () {
    $('#btnUpdate').click(function (e) {
        // Cancel default action
        e.preventDefault();
        $.ajax({
            cache: false,
            type: 'POST',
            url: '@Url.Action("Action", "Controller")',
            data: $('#formId').serialize(),
            success: function (data) {
                alert(data);
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert('Error during process: \n' + xhr.responseText);
            }
        });
    });
});

すべて正常に動作します。2つのパラメータを渡す際に何が間違っていますか?

THX!!!

4

4 に答える 4

1

JSON で JSON.stringify() を呼び出してみてください。

data: JSON.stringify({ id: $('#id').val(), collection: formCollection })
于 2012-09-25T06:28:17.240 に答える
1
$(document).ready(function () {
    $('#btnUpdate').click(function (e) {
        // Cancel default action
        e.preventDefault();
        var formCollection = $('#formId').serialize();
        $.ajax({
            cache: false,
            type: 'POST',
            url: '@Url.Action("Action","Controller")',
            data: JSON.stringify({ id: $('#id').val(), collection: formCollection }),
            success: function (data) {
                alert(data);
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert('Error during process: \n' + xhr.responseText);
            }
        });
    });
});

jsonstringify でデータを渡す必要があります

于 2012-09-25T06:30:15.583 に答える
0

これは実際の時計です: デバッグ

パラメータIDが正常に送信されました(Name = id、Wert = 10000)。idの上に、ajax呼び出しのFORM.serialize()値を含むformCollectionが表示されます。ただし、System.Web.Mvc.FormCollectionには、 idcollectionの2つのキーのみが含まれています。期待していた

  1. "名前"
  2. "住所"
  3. "アドレス2"
  4. ..。

ajaxリクエストの作成を間違えた場合は思いますが、理由はわかりません...

var customerNo = $('#fieldID').val();
var formCollection = $('#formID').serialize();
$.ajax({
    cache: false,
    type: 'POST',
    url: '@Url.Action("Action", "Controller")',
    data: { id: customerNo, collection: formCollection },
    dataType: 'json',
    success: function (data) {
        if (data) {
            alert(data);
        };
    },
    error: function (xhr, ajaxOptions, thrownError) {
        alert('Error during process: \n' + xhr.responseText);
    }
});

次の行でエラーが発生します。

data: JSON.stringify({ id: customerNo, collection: formCollection })

パラメータディクショナリには、null許容型の「System.Int32」のnullエントリ「id」が含まれています。

効果なしに変更:

data: { id: customerNo, collection: JSON.stringify(formCollection) },

何か案は?

于 2012-09-26T06:41:28.217 に答える