2

MVCとこの種のプログラミングは初めてです。これは非常に些細なことだと思いますが、5時間検索して試してみると、敗北したと感じます。ビューに次のような投稿があります。

 $.ajax({
        url: '@Url.Action("Moo")',
        type: "post",
        dataType: "string",
        contentType: "json",
        data: JSON.stringify({"foo": "bar"}),
        success: function (data) {}
        });
    });

次に、コントローラーに次のような関数があります。

Function Moo(test As String) As ActionResult
    Return View()
End Function

デバッガーを実行すると、Return-statement に到達したことが示されますが、値を割り当てるテストがありません (foo:bar)。

私が持っているもう1つの考慮事項は、ajax関数からデータを受け取ることができたときに、それをJSONに変換できるか、それともモデルで独自のクラスを作成して変数をそのクラスに割り当てる必要があるかということです.

どんな入力も評価されます。

4

3 に答える 3

1

パラメータ/プロパティ名は一致する必要があります。

したがって、アクションで名前の値testが必要な場合は、キーを使用して値を送信する必要がありますtest。したがって、次のように変更footestます。

$.ajax({
        url: '@Url.Action("Moo")',
        type: "post",
        dataType: "string",
        contentType: "application/json",
        data: JSON.stringify({"test": "bar"}),
        success: function (data) {}
        });
    });

JSONの正しいcontentTypeは次のとおりです。application/json

JSON.stringify({"test": "bar", "test1":"bar1"}), サーバー側でオブジェクトを作成できるなど、より複雑なデータがある場合(C#で申し訳ありません)

public class MyClass
{
    public string test { get; set; }

    public string test1 { get; set; }
}

次に、このモデルをアクションで使用できます。

Function Moo(test As MyClass) As ActionResult
    Return View()
End Function

また、MVCモデルバインダーは、データの解析とプロパティの入力を行います。ここからモデルバインディングについて学び始めることができます:ASP.NETMVCモデルバインディングの機能と機能

于 2013-01-28T06:20:06.360 に答える
0

これは別のアプローチでは試してみたいと思うかもしれません[最高ではないかもしれませんが]

$.ajax({
        url: '@Url.Action("Moo")?test="testdata"',
        type: "post",
        dataType: "string",
        contentType: "json",
        data: JSON.stringify({"test": "bar"}),
        success: function (data) {}
        });
    });

渡すパラメーター名は、サーバー上のアクションメソッドのパラメーター名と一致する必要があります。

于 2013-01-28T06:20:13.287 に答える
0

これを変更する必要があると思います:

$.ajax({
    url: '@Url.Action("Moo")',
    type: "post",
    dataType: "text", //<---------------------this
    contentType: "application/json", // <-----this 
    data: JSON.stringify({"foo": "bar"}),
    success: function (data) {}
    });
});

または、これも変更してみてください:

data: {foo : "bar"},

データ型は次のとおりです。

  • "xml": jQuery で処理できる XML ドキュメントを返します。
  • "html": HTML をプレーン テキストとして返します。含まれている script タグは、DOM に挿入されたときに評価されます。
  • "script": 応答を JavaScript として評価し、プレーン テキストとして返します。
  • "json": 応答を JSON として評価し、JavaScript オブジェクトを返します。
  • "jsonp": JSONP を使用して JSON ブロックに読み込みます。「?callback=?」を追加します。URL の末尾に追加して、コールバックを指定します。
  • "text": プレーン テキスト文字列。
于 2013-01-28T06:25:55.413 に答える