4

次のようにJSON文字列をasp.net MVCに投稿しています。

AJAX 呼び出し

$.ajax({
            type: "POST",
            url: "@(storeLocation)IDR/OpcInsertCustomerProfile/",
            data: JSON.stringify(currSelection),
            contentType: "application/json",
            success: function(data) {
              alert('success : ' + JSON.stringify(data));
            },
            error: function(data) {
             alert('Error : ' + JSON.stringify(data));
            }
          }
        );

コントローラーで:

[HttpPost]
        [ActionName("OpcInsertCustomerProfile")]
        public JsonResult OpcInsertCustomerProfile(string currSelectionData)
        {
            try
            {
                JavaScriptSerializer ser = new JavaScriptSerializer();
                var res = ser.Serialize(currSelectionData);
                return Json(currSelectionData, JsonRequestBehavior.AllowGet);

            }
            catch (Exception exc)
            {
                return Json(new { error = 1, message = exc.Message });
            }
        }

デバッガーは、アクションが正常に呼び出されたことを示しますが、受け取った着信文字列パラメーターは常に null です。Firebug 'post' は、発信パラメーターが適切な json オブジェクトであることを示しています。JSON 文字列が着信パラメーターとして表示されることを期待しています。適切なオブジェクトにデシリアライズしたくないことに注意してください。私がやりたいのは、文字列をJSON形式で「そのまま」データベースに保存することだけです。後でそれを取得し、そのまま Javascript に渡す必要があります。

4

5 に答える 5

3

これを試して :

$.ajax({
            type: "POST",
            url: "@(storeLocation)IDR/OpcInsertCustomerProfile/",
            data: { "currSelectionData" : "'" + JSON.stringify(currSelection) + "'" },
            contentType: "application/json",
            success: function(data) {
              alert('success : ' + JSON.stringify(data));
            },
            error: function(data) {
             alert('Error : ' + JSON.stringify(data));
            }
          }
        );
于 2012-09-27T06:18:33.763 に答える
1

1 つの方法は、アクションがパラメーターを JSON の「文字列化」データではなく POST データとして受け取ることを許可することです。そのためには、JSON.Stringify なしでデータを投稿します。うまくいけば、これはあなたが必要とするものです。

そうでない場合は、この単純なデータを受け取るためだけにオブジェクトを作成してみてください。

于 2012-10-04T19:57:12.700 に答える
0

アクションメソッドを見てください。メソッドがシリアル化されたJSONで文字列を受け入れるのは正しいですか、その文字列をJSONとして再度シリアル化してから結果を閉じて、同じ文字列をシリアル化して再度返しますか?

application / jsonタイプでリクエストを送信すると、ASP.NET MVCは受信した文字列を逆シリアル化し、アクションパラメーターにバインドしようとします。この場合、JSONオブジェクト内のプロパティcurrSelectionDataを検索しようとします。そのプロパティは存在しますか?たぶん、文字列全体がcurrSelectionDataパラメータとして受け取られることを期待していますか?次に、デフォルトのモデルバインダーがこれをサポートしていないため、代わりにFormCollectionまたはRequest.Formを使用する必要があります。

于 2012-09-27T06:20:14.013 に答える
0

Ajax 経由で json を送信する場合、Ajax のデータ プロパティには次の方法が適切だと思います。 data: "{'parameterNameInAction':'" + JSON.stringify(jsonData) + "'}"

于 2013-09-13T11:27:59.360 に答える
0

実際には、国の選択で州のドロップダウンをjsonで埋めます

私のコントローラーには、以下のようなjson形式でデータを返すアクションがあります

public JsonResult State(int countryId)
        {               
            var stateList = CityRepository.GetList(countryId);
            return Json(stateList, JsonRequestBehavior.AllowGet);
        } 

私からしてみれば

<script type="text/javascript">
    function cascadingdropdown() {
        $("#stateID").empty();
        $("#stateID").append("<option value='0'>--Select State--</option>");
        var countryID = $('#countryID').val();
        $.ajax({
            url: "/City/State",
            dataType: 'json',
            data: { countryId: countryID },
            success: function (data) {
                $("#stateID").empty();
                $("#stateID").append("<option value='0'>--Select State--</option>");
                $.each(data, function (index, optiondata) {
                    alert(optiondata.StateName);
                    $("#stateID").append("<option value='" + optiondata.ID + "'>" + optiondata.StateName + "</option>");
                });
            },
            error: function () {
                alert('Faild To Retrieve states.');
            }

        });
    } 
</script>

私はこれがあなたを助けると思う...

于 2012-09-27T06:30:20.597 に答える