1

これが私のJavaScriptメソッドです:

function AssignDebtor(e) {
        var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
        var debtorId = dataItem.Id;

        $.post({
            url: '@Url.Action("AssignDebtorToUnallocatedReceipt", "Debtor")',
            data: new { unallocatedReceiptId : cdcUnallocatedReceiptId, debtorId : debtorId },
            success: function (result, textStatus, jqXHR) {
                if (result.success) {
                    var window = $("#LookupDebtorWindow").data("kendoWindow");
                    window.close();

                    var grid = $("#UnallocatedReceiptsGrid").data("kendoGrid");
                    grid.dataSource.read();
                }
                else {
                    alert(result.error);
                }
            },
            dataType: 'json'
        });
    }

実行時に、デバッガーは $.post 行で停止し、次のエラーを返します。

0x800a01bd - JavaScript ランタイム エラー: オブジェクトはこのアクションをサポートしていません

duetorId はその値を正常に取得します。メソッドを構築した方法に問題があるのでしょうか。

4

2 に答える 2

3
new { unallocatedReceiptId : cdcUnallocatedReceiptId, debtorId : debtorId }

構文エラーのように見えますが、残念ながらありません。代わりに、オブジェクト (まったく関数ではない) をコンストラクターとして使用しようとすると、例外がスローされます。

new演算子を省略してください。

また、@danludwig が述べたように、$.post関数のシグネチャが異なるため、オブジェクトをパラメーターとして渡すことはできません。むしろに切り替え$.ajaxます。

于 2013-03-12T13:13:07.783 に答える
2

$.post does not allow you to pass in a javascript object, it expects more strongly-typed method parameters. See the jQuery docs and try this instead:

function AssignDebtor(e) {
    var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
    var debtorId = dataItem.Id;

    $.ajax({
        type: 'POST',
        url: '@Url.Action("AssignDebtorToUnallocatedReceipt", "Debtor")',
        data: { unallocatedReceiptId : cdcUnallocatedReceiptId, debtorId : debtorId },
        success: function (result, textStatus, jqXHR) {
            if (result.success) {
                var window = $("#LookupDebtorWindow").data("kendoWindow");
                window.close();

                var grid = $("#UnallocatedReceiptsGrid").data("kendoGrid");
                grid.dataSource.read();
            }
            else {
                alert(result.error);
            }
        },
        dataType: 'json'
    });
}

... or if you are partial to $.post, you could do this instead:

function AssignDebtor(e) {
    var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
    var debtorId = dataItem.Id;

    $.post('@Url.Action("AssignDebtorToUnallocatedReceipt", "Debtor")',
        { unallocatedReceiptId : cdcUnallocatedReceiptId, debtorId : debtorId },
        function (result, textStatus, jqXHR) {
            if (result.success) {
                var window = $("#LookupDebtorWindow").data("kendoWindow");
                window.close();

                var grid = $("#UnallocatedReceiptsGrid").data("kendoGrid");
                grid.dataSource.read();
            }
            else {
                alert(result.error);
            }
        },
        'json'
     );
}

Note I also took out the new keyword from your parameters object.

于 2013-03-12T13:06:37.333 に答える