2012-08-06 118 views
0

所以我有这个JSONAsp.net MVC 3 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) 

当我post,res始终为空。有什么想法吗?我究竟做错了什么?是的,我张贴,是的,我正在使用jQuery:是的,我得到我的控制器上的行动,但res是空的。帮帮我!一如既往地感谢...!

+0

我不确定,但日期似乎有点奇怪?如果我编写JSON.stringify(new Date()),我会得到另一种格式...为了便于调试,尝试删除.NET类中的一些属性,并查看哪一个属性混乱... – 2012-08-06 18:34:59

+0

date属性是一个字符串......无论格式如何,都应该可以。我删除了所有的属性......他们有趣的是MRN遇到了任何问题......它的集合是问题 – jsteve81 2012-08-06 18:41:51

+0

当我在命令窗口中查看Request.Form [“res”]时,有一些信息调试时,我得到以下内容:[{\“registry \”:1,\“episodeType \”:{\“id \”:6,\“dateAndTime \”:\“08-06-2012 13:57 \” }}]。我似乎还不知道问题出在哪里。这是模型活页夹的限制吗?我需要实现我自己的吗? – jsteve81 2012-08-06 18:59:27

回答

1

所以这是一个有趣的解决方案...我使用淘汰赛。 Knockout有一些功能可以让您将viewModel作为pojo(普通的旧JSON对象)或pojso(普通的旧javascript对象)提供给您。

所以这里就是这个时刻...... asp.net模型联编程序期望一个字符串化的JSON字符串进行转换。淘汰赛的的toJSON stringifies的ViewModels了,所以当你有一颗灵长类动物的类型像绳子和一个集合作为参数传递给你的行动,你必须得到基本类型的值一样

var m = self.model.property();

然后获取集合为pojso,像

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

然后字符串化他们像

var data = JSON.stringify({prop1: m, prop2: c});一个完整的视图模型。

最后,你有一个jQuery Ajax调用模型服务器端发送到操作方法类似

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

这显然是卓有成效的。看起来像对我来说,但它的作品。希望这可以帮助别人。