将JSON字符串发布到ASP.NET MVC 3操作会导致null参数

时间:2012-09-27 06:14:25

标签: javascript asp.net json asp.net-mvc-3

我将一个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格式存储在数据库中“as-it-is”。稍后需要检索并传递给Javascript。

5 个答案:

答案 0 :(得分: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));
            }
          }
        );

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

看一下你的动作方法:方法接受带有序列化JSON的字符串是否正确,而不是再次将该字符串序列化为JSON,然后解除结果并序列化并再次返回相同的字符串?

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

答案 3 :(得分: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>

我认为这会对你有帮助......

答案 4 :(得分:0)

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