2

我正在尝试将两个参数从 javascript 传递给 mvc 控制器。第一个是模型,第二个是字符串。

这是html:

<input type="button" onclick="save(Json.Encode(@Html.Raw(model)), @Html.Raw(object.Id))" />

这是javascript:

function save(model, id) {

      $.ajax({
          url: '@Url.Action("SaveModel", "Test")',
          type: "POST",
          datatype: "json",
          data: { model: model, id: id }
          }
      });

  }

这是控制器:

[HttpPost]
    public ActionResult SaveModel(Model model, string id)
    {
        return null;
    }

如果我只传递模型参数data: { model: model }它就可以工作。请求的帖子变成了这样:

AProperty   value1
AnotherProperty value2
AnArray[0][Property...
AnArray[1][Property...
etc.

但是如果我尝试传入两个参数data: { model: model, id: id },请求的帖子就会变成

model[AProperty]    value1
model[AnotherProperty]  value2
model[AnArray][0][Property...
model[AnArray][1][Property...
etc.

当请求到达控制器时,模型对象被实例化,但所有值都变为空。我猜序列化器失败了。

所有帮助表示赞赏。

4

2 回答 2

1

我的同事解决了。您必须指定内容类型并在模型上进行字符串化,如下所示:

$.ajax({
      url: '@Url.Action("SaveModel", "Test")',
      type: "POST",
      contentType: "application/json",
      data: JSON.stringify({ model: model, id: id })
      }
  });

也许这将在未来对其他人有所帮助。

于 2012-09-10T13:52:29.013 回答
0

您可以尝试使用这个JSON 库并利用stringify()

$.ajax({
      url: '@Url.Action("SaveModel", "Test")',
      type: "POST",
      datatype: "json",
      data: JSON.stringify({ model: model, id: id })
    }
});
于 2012-09-07T16:02:13.790 回答