2

文字列のコレクションの Javascript 配列を apicontroller の post アクションに渡しています。データが送信されています (これは fiddler 経由でわかっています)。コード。私のコードは以下のとおりです。どんな助けでも大歓迎です。

編集:明確にするために、コントローラーアクションが呼び出されますが、リストが渡されている場合、リスト stuffsId のカウントはゼロです

Ajax/Javascript

my.sendStuffToController = function (stuffIds, completedHandler) {

        $.ajax({
            dataType: 'json',
            type: 'POST',
            url: my.stuffUrl,
            data: {
                stuffIds: stuffIds
            },
            success: function (data) {

                if (completedHandler !== undefined) {
                    completedHandler(stuffIds);
                }
            }
        });
    };

私のApiControllerポストアクション

    // Post 
    public void PostAsync(List<string> stuffIds)
    {
        var clientProxy = this.proxyFactory.CreateClientProxy(Tokens.EndPoint);
        var clientChannel = clientProxy.GetClientChannel();

        try
        {
            clientChannel.DoStuffAsync(stuffIds);
        }
        finally
        {
            clientProxy.TryCloseAbortClientChannel();
        }
    }
4

2 に答える 2

1

dataTypeリクエストの戻り値の型を指定するために使用されます。 contentType何を送信しているかをサーバーに伝えるために使用する必要があります。

于 2013-03-11T16:19:23.897 に答える
0

jQuery から post パラメーターとして配列を渡す際に発生する可能性のある (そして最も一般的な) 問題の 1 つは、ここで説明されています。

短縮版:

追加

jQuery.ajaxSettings.traditional = true;

jQuery ajax() 関数呼び出しの前、つまり

jQuery.ajaxSettings.traditional = true;
my.sendStuffToController = function (stuffIds, completedHandler) {

        $.ajax({
            dataType: 'json',
            type: 'POST',
            url: my.stuffUrl,
            data: {
                stuffIds: stuffIds
            },
            success: function (data) {

                if (completedHandler !== undefined) {
                    completedHandler(stuffIds);
                }
            }
        });
    };

長いバージョン:

ある時点から、変数が配列の場合、jQueryは変数名に角括弧を追加し始めました。つまり、あなたの場合、ajax呼び出しで 'stuffIds[]:value1 stuffIds[]:value2' などを送信します。ASP.NET MVC はそれを好まず、そのようなパラメーターの受け入れを拒否します。jQuery.ajaxSettings.traditional = trueこの jQuery の「機能」をオフにします。

于 2013-03-11T15:33:17.067 に答える