将JSON字符串传递给MVC Controller时出错

时间:2015-02-28 11:07:13

标签: jquery json asp.net-mvc asp.net-mvc-controller

事实上这是简单的情况,但我找不到解决方案:我需要通过jQuery ajax将JSON字符串传递给我的MVC控制器,但Controller总是收到null。 这是jQuery:

$("#makebooking").click(function (e) {
            var json;
            if ($("form").valid()) {
                var arr = $("form").serializeArray();
                json = JSON.stringify({ 'command': arr });
            }
            $.ajax({
                url: "@Url.Content("~/Booking/CreateBooking")",
                data: json,
                type: "post",
                cache: false,
                dataType: "json",
                success: function (result) {
                    if (result != null) {
                        window.location = result;
                    } else {
                        $("#modalerror").on("show.bs.modal", function () {
                            var modal = $(this);
                            modal.find("#errormsg").text(result.Error);
                        });
                    }
                },
                error: function (xhr) {
                    var err = eval("(" + xhr.responseText + ")");
                    alert(err.Message);
                }
            });

控制器代码在这里:

        [HttpPost]
        public JsonResult CreateBooking(string command)
        {           
            byte[] stream = HttpServerUtility.UrlTokenDecode(Request.Cookies["psw"].Value);
            byte[] decodedValue = MachineKey.Unprotect(stream, "all");
            var psw = Encoding.UTF8.GetString(decodedValue);
            var a = _br.CreateBooking(User.Identity.Name, psw, command);
            return Json(a);
        }

我希望有人可以重新审视此代码并提供解决方案建议。感谢。

2 个答案:

答案 0 :(得分:1)

POST方法的参数为string,但您回发json

将方法更改为

[HttpPost]
public JsonResult CreateBooking(YourModel model)

和脚本

if ($("form").valid()) {
  var json = $('form').serialize(); // serialize the form values to json
  $.ajax({
    url: '@Url.Action("CreateBooking", "CreateBooking")', // recommended
    data: json,
    ....

您的模型将在POST方法中正确绑定

答案 1 :(得分:0)

我不确定这是否是你问题的全部内容,但看起来你的ajax调用中的url引号有问题。尝试将单引号与双引号混合使用,例如

url: "@Url.Content('~/Booking/CreateBooking')"