0

所以我有这个 JSON

mrn:"0760433"
res:[{"registry":1,"episodeType":{"id":6,"dateAndTime":"08-06-2012 13:21"}}]

我有这些视图模型

    public class patient
    {
        public string mrn { get; set; }

    }

    public class episodeType
    {
        public int id { get; set; }
        public string dateAndTime { get; set; }
    }

    public class registryEpisode 
    {
        public int registry { get; set; }
        public episodeType episodeType { get; set; }

       public registryEpisode()
       {
           registry = 0;
           episodeType = new episodeType();
       }
    }

这个控制器签名:

public JsonResult StartSession(string mrn, List<registryEpisode> res)

当我发布时, res 始终为空。有什么想法吗?我究竟做错了什么?是的,我在发帖,是的,我正在使用 jquery:

$.post('Action', data, function () {});

是的,我确实在我的控制器上执行了我的操作,但 res 为空。帮助!一如既往地提前感谢...!

4

1 回答 1

1

所以这是一个有趣的解决方案……我正在使用淘汰赛。Knockout 有一些特性,允许您将 viewModel 作为 pojo(普通的旧 JSON 对象)或 pojso(普通的旧 javascript 对象)提供。

所以这是一个糟糕的时刻...... asp.net 模型绑定器需要一个字符串化的 JSON 字符串进行转换。Knockout 的 toJSON 已经对 viewModel 进行了字符串化,因此当您将原始类型(如字符串)和集合作为操作的参数时,您必须获取原始类型的值,例如

var m = self.model.property();

然后将集合作为 pojso 获取,例如

var c = ko.toJS(self.model.collection)

然后将它们字符串化为一个完整的视图模型,例如

var data = JSON.stringify({prop1: m, prop2: c});.

最后,您将带有 jquery ajax 调用的模型服务器端发送到 Action 方法,例如

public JsonResult StartSession(string prop1, IList<registryEpisode> prop2){}

这显然可以解决问题。对我来说似乎是一个黑客,但它有效。希望这对其他人有帮助。

于 2012-08-06T20:58:20.547 回答