1

jQueryを使用して、次のコントローラーアクションに2つの値を渡そうとしています

[HttpPost]
        public JsonResult Cancel(Guid Id, string cancelReason)
        {
            //do something
        }

.js:

    CancelProgram = function (Id) {
//this is basically the value from a select tag placed on the form            
var reason = $("#CancelReasons").val();
            alert(reason);

            Origin.ajax({
                url: '/ZYX/Cancel?Id=' + Id,
                type: 'POST',
                dataType: 'json',
                data: { cancelReason: reason },
                success: function (data) {
                    alert('success!');
                }
            });
        };
    });

アクション メソッドの cancelReason の値は常に null です。これが機能しない理由についての指針はありますか?

4

4 に答える 4

4

コードの別の部分に問題があるはずです。値をハードコーディングし、適切に送信されるようにすることで、通常の AJAX リクエストを送信することから始めます。

$.ajax({
    url: '/ZYX/Cancel',
    type: 'POST',
    data: { 
        id: '24fe0c97-c227-4312-91fc-6e651df8b64f', 
        cancelReason: 'some reason' 
    },
    success: function (data) {
        alert('success!');
    }
});

この単純な例が機能することを確認したら、変数を使用してより動的にします。このようにして、問題の原因を絞り込んで見つけることができます。また、FireBug などの JavaScript デバッグ ツールを使用することを強くお勧めします。これにより、javascript エラーがあるかどうかだけでなく、送信されている正確な要求/応答など、他の多くの有用な情報をコンソールで確認できます。

AJAX リクエストが成功した場合、FireBug の [ネットワーク] タブに次のように表示されます。

Accept:             */*
Accept-Encoding:    gzip, deflate
Accept-Language:    en-us,en;q=0.5
Connection:         keep-alive
Content-Length:     64
Content-Type:       application/x-www-form-urlencoded; charset=UTF-8
User-Agent:         Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0) Gecko/20100101 Firefox/10.0
X-Requested-With:   XMLHttpRequest

id=24fe0c97-c227-4312-91fc-6e651df8b64f&cancelReason=some+reason

idcancelReasonパラメータの両方が を使用して送信されることに注意してくださいapplication/x-www-form-urlencoded

この種の問題をデバッグする方法を実際に学ぶ必要があり、それらをデバッグする方法は適切なツールを使用することです。

于 2012-04-13T21:40:00.090 に答える
1

どうですか

            url: '/ZYX/Cancel',
            type: 'POST',
            dataType: 'json',
            data: { Id: Id, cancelReason: reason },
            success: function (data) {
                alert('success!');
            }
于 2012-04-13T21:13:42.587 に答える
0

指定したルートを提供する必要があり、それはもう少し良い答えに役立つかもしれませんが、これは今のところうまくいくはずです:

url: '/ZYX/Cancel?Id=' + Id + '&cancelReason=' + reason,

また、データをまったく渡さないでください。これが機能しない場合は、フィドラーまたは別のネットワーク ウォッチャー アドオンまたはデバッガーを使用して、その理由が有効な値であることを確認します。

于 2012-04-13T21:21:16.417 に答える
-2

次のように、Global.asax ファイルでルートを設定してみてください。

routes.MapRoute(
            "Cancel", // Route name
            "{controller}/{action}/{id}/{cancelReason}", // URL with parameters
            new { controller = "YourController", action = "Cancel", id = UrlParameter.Optional, cancelReason = UrlParameter.Optional } // Parameter defaults
        );
于 2012-04-13T21:24:30.880 に答える