1

我正在使用 MVC 4,并且一直在努力将 Json 从由 Knockout.Js 构建的客户端返回到我的控制器操作。Json 可以正常发布并在 Fiddler 中检查它似乎一切正常,但是当 JsonResults Action 绑定它时,生成的对象没有 Json 中存在的 ICollection。

我的客户 ajax 帖子如下所示:

$.ajax({
            url: location.href,
            type: 'POST',
            data: ko.toJSON(this.Orders),
            dataType: "json",
            contentType: "application/json charset=utf-8",
            success: function (data) {
                alert(data.Message);
            }
        });

这会产生以下 Json:

[{"Number":1,"Properties":{"Id":2,"Title":"#333"},"UnitCost":"20"}]

我在服务器端的 viewModel 结构是这样的:

订购型号

     public class VmOrder 

{

    public int Number
    {
        get;
        set;
    }

    public ICollection<VmProperty> Properties
    {
        get;
        set;
    }

    public decimal UnitCost
    {
        get;
        set;
    }

 }  

物业模型

   public class VmProperty
    {

    public int Id
    {
        get;
        set;
    }

    public string Title
    {
        get;
        set;
    }
 }

最后我的控制器看起来像这样:

    [HttpPost]
    public JsonResult Order(ICollection<VmOrder> Orders)
    {

        // further server-side validation, save to database, etc
        return Json("Saved", "");
    }

虽然我得到了 Number 和 UnitCost,但 Properties 集合为空,有什么想法吗?

4

2 回答 2

1

尝试更换:

contentType: "application/json charset=utf-8"

和:

contentType: "application/json; charset=utf-8"

您缺少 a ,因此导致请求标头;无效且不存在。Content-Type

于 2013-04-07T13:15:25.027 回答
0

正如 Nemsev 所说, "Properties":{"Id":2,"Title":"#333"} 只包含一个对象而不是一个数组。数组版本如下所示:"Properties":[{"Id":2,"Title":"#333"}]。所以在 C# 方面你需要 public VmProperty Properties { get; 放; } 而不是集合。

于 2013-04-09T07:55:43.597 回答