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 });
            }
        }

调试器指示操作被成功调用,但是接收到的传入字符串参数始终为空。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

一种方法是允许操作以 POST 数据而不是 JSON“字符串化”数据的形式接收参数。为此,请在不使用 JSON.Stringify 的情况下发布数据。希望这是你需要的。

如果不是,您可能想尝试创建一个对象只是为了接收这个简单的数据。

于 2012-10-04T19:57:12.700 回答
0

实际上,我在选择国家/地区时填写了我的状态下拉列表,我确实喜欢这样

在我的控制器中,我采取了行动,它以 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 回答
0

通过 Ajax 发送 json 时,我认为这是 Ajax 中 data 属性的正确方法: data: "{'parameterNameInAction':'" + JSON.stringify(jsonData) + "'}"

于 2013-09-13T11:27:59.360 回答
0

查看您的操作方法:该方法接受带有序列化 JSON 的字符串是否正确,而不是再次将该字符串序列化为 JSON,然后关闭结果并序列化并再次返回相同的字符串?

如果您使用 application/json 类型发送请求,ASP.NET MVC 会尝试反序列化接收到的字符串并将其绑定到操作参数:在您的情况下,它会尝试JSON 对象中查找属性 currSelectionData。那个属性存在吗?也许您希望整个字符串作为currSelectionData参数接收?然后您需要使用 FormCollection 或 Request.Form 代替,因为默认模型绑定器不支持这一点。

于 2012-09-27T06:20:14.013 回答