无法序列化在控制器中使用两个参数的位置

时间:2012-09-07 15:54:07

标签: javascript asp.net-mvc-3

我正在尝试将两个参数从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.

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

所有帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

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

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

这可能会在将来帮助其他人。

答案 1 :(得分:0)

您可以尝试使用此JSON library并利用stringify()

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