4

さて、この質問に関してたくさんの質問が投稿されているのを見てきましたが、実際にうまくいった回答はありません。私のAJAXは次のとおりです。

$.ajax({
        url: "/FilterSessions/GetFilterSession",
        type: "GET",
        dataType: "json",
        data: jsonFilters,
        traditional: true,
        success: function (response) {
            //Haha, it's never entering here. not really.
        }
    });

var "jsonFilters" には、次のデータを含む配列が含まれています。

[0] = { Path: "Test", Name: "More testing", Value: "Test Value" },
[1] = { Path: "Test", Name: "More testing", Value: "Test Value" } 

そして、これは私のコントローラーです:

public ActionResult GetFilterSession(List<FilterSessionModel> jsonFilters)
{
    //Do things

    return Json(false, JsonRequestBehavior.AllowGet);
}

jsonFilters は常に null のままです... contentType: "application/json; charset=utf-8"AJAX 呼び出しにも追加しようとしましたが、実際には何もしませんでした

最終的に、クラスFilterSessionModelは次のように構成されます。

 public class FilterSessionModel
    {
        public string Path { get; set; }
        public string Name { get; set; }
        public string Value { get; set; }
    }

何が欠けているのか、何が起こっているのかについてのアイデアはありますか?

私がこれまでに試したこと:

"traditional: true" を設定し、"contentType" を設定し、JSON.stringify を使用して、MVC コントローラーで文字列を受け入れようとしています (no-go)

更新: 以下の回答のおかげで、不足していたのは、次のようにパラメーター Id を使用してデータを送信することであることに気付きました。

 data: "{param1ID:"+ param1Val+"}"
4

5 に答える 5

1

あなたのアクションのタイプを切り替えてみます。

List<FilterSessionModel>

上記がうまくいかないことは確かです。私は Object のようなものを試してみます。

または、newton json dll を使用してクラスのリストにプッシュする文字列かもしれません。

問題は、ajax get が呼び出される前にデータをチェックしていると仮定すると、アクションがタイプを把握できないことに要約されます。

**詳細情報により更新。エラー部分を追加し、コントローラーから返されたときにこれらの変数を表示します。また、フィドラーを起動して、http 番号の取得内容を監視します。

$.ajax({
    type: "POST",
    url: "Servicename.asmx/DoSomeCalculation", 
  data: "{param1ID:"+ param1Val+"}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        UseReturnedData(msg.d);
    },
    error: function(x, t, m, b) {
        //Look at the vars above to see what is in them.
    }
});
于 2013-09-14T23:38:58.140 に答える
1

JavaScript または ajax 呼び出しは、オブジェクトを型キャストしません。. .コントローラー側のパラメーターのタイプを文字列またはリストに設定する必要があります。それ以外の場合は、オブジェクト タイプを設定することもできます。. そのようにコードを変更した場合..あなたのコードは間違いなく動作します!!!

于 2013-09-23T11:59:47.013 に答える
0

まず、あなた$.ajaxが他の Javascript フレームワークのためJQueryのものではなく、他の Javascript フレームワークのためのものであると仮定しています。それが間違っている場合は修正してください。

ASP.NET MVC は、実際に要求されていることを実行できます (AJAX 経由で送信されたデータを に解決しますがList<FilterSessionModel>、GET 要求経由でそれを行うのは難しいようです。ASP.NET MVC のどのバージョンを使用するかを知っておくと役立ちます。古いバージョンでこれを機能させるには、さらに多くのものが必要になるため、使用していますが、私が提案していることは、MVC 3 または 4 で機能するはずです。

GET リクエストを使用して JQuery 経由で AJAX を送信し、それに JavaScript 配列を渡すと、次のようにサーバーに送信されます。

http://localhost:50195/FilterSessions/GetFilterSession?undefined=&undefined=

実際にはデータが送信されていないため、モデルが null であることは不思議ではありません。

ASP.NET はこのようなオブジェクト (さらにはオブジェクトの配列) を受け入れることができると思いますが、JSON 形式 (JSON.stringify など) では受け入れられないため、次の要求が返されるだけです。

http://localhost:50195/FilterSessions/GetFilterSession?[{%22Path%22:%22Test%22,%22Name%22:%22TestName%22,%22Value%22:%22Testing%22},{%22Path%22:%22Test%22,%22Name%22:%22TestName%22,%22Value%22:%22Testing%22}]

おそらくこれを行う方法は、POST 要求を使用することです。ASP.NET MVC は実際に JSON 文字列を POST データとして受け入れ、それをデコードしてモデルを適切に解決します。AJAX コードは、いくつかの変更を加えると正常に動作します。

$.ajax({
    url: "/FilterSessions/GetFilterSession",
    type: "POST", //Changed to POST
    dataType: "json",
    data: JSON.stringify(jsonFilters), //Pack data in a JSON package.
    contentType: "application/json; charset=utf-8", //Added so ASP recognized JSON
    traditional: true,
    success: function (response) {
        alert('Success!');
    }
});

投稿したコントローラーは既に POST データを認識しているはずですが、そうでない場合は、単純な[HttpPost]属性だけで十分です。

[HttpPost]
public ActionResult GetFilterSession(List<FilterSessionModel> jsonFilters)
{
    //Do things

    return Json(false, JsonRequestBehavior.AllowGet);
}
于 2013-09-15T01:20:42.103 に答える
0
$.ajax({
    url: "/FilterSessions/GetFilterSession",
    type: "GET",
    dataType: "json",
    data:JSON.stringify({ 'jsonFilters': jsonFilters}),
    contentType: 'application/json; charset=utf-8',
    success: function (response) {
        //Do your action
    }
});
于 2017-01-10T15:03:28.340 に答える
0

あなたが探しているものはここで答えられると思います:

jQuery Ajax を使用してオブジェクトのリストを MVC コントローラー メソッドに渡す

于 2013-10-23T12:19:52.743 に答える