3

私は自分の間違いが何であるかを理解するためにネットを見てきました。私が見つけたすべての提案を試しましたが、成功しませんでした。コントローラーで httppost アクションにアクセスしますが、パラメーターは空のままです。

AJAX 関数

var dataPost = { 'id': id, 'val': val };
                    debugger;
                    $.ajax({
                        type: 'POST',
                        url: '/Extensions/UpdateJson',
                        data: dataPost ,
                        contentType: 'json',
                        success: function () {
                            alert("succes");
                        },
                        error: function () {
                            alert("error");
                        }
                    });

デバッグ時に DataPost が読み込まれます。

コントローラ

    [HttpPost]
    public ActionResult UpdateJson(string id, string val)
    {
        //do stuff
        return Json(true);
    }

コントローラーで使用したパラメーターは、Ajax 関数と同じ名前です。渡された形式はjsonです。データに次のものを入力しようとしました:

var dataPost = { 'id': 'id', 'val': 'val' };

しかし、これは何の違いもありません。--> のように、クラスを操作しようとしました。

クラス

public class ScheduleData
{
    public string id { get; set; }
    public string val { get; set; }
}

コントローラ

    public ActionResult UpdateJson(ScheduleData data)
    {//Do something}

どんな助けでも大歓迎です。前もって感謝します

4

1 に答える 1

6

渡される形式はjsonです

いいえ、まったくありません。JSON を送信していません。あなたがすることは

data: { 'id': id, 'val': val }

しかし、ドキュメントが明確に説明しているように、これはエンコーディングを使用する$.param関数を使用しています。application/x-www-form-urlencoded

contentType: 'json'したがって、 $.ajax 呼び出しからこのプロパティを削除してください。

または、本当に JSON を送信したい場合は、次のようにします。

var dataPost = { 'id': id, 'val': val };
$.ajax({
    type: 'POST',
    url: '/Extensions/UpdateJson',
    data: JSON.stringify(dataPost),
    contentType: 'application/json',
    success: function () {
        alert("succes");
    },
    error: function () {
        alert("error");
    }
});

注意事項:

  • を使用しJSON.stringify(dataPost)て、JSON 文字列をサーバーに送信していることを確認します
  • contentType: 'application/json'それが正しい Content-Type 値だからです。
于 2013-05-23T08:43:29.380 に答える