Controller Action不会绑定JSON ViewModel

时间:2013-02-17 23:57:10

标签: asp.net-mvc json asp.net-mvc-3 knockout.js knockout-2.0

每次发布​​到我的Action时,我的ViewModel都不为null,但内部的所有值都是。

我有console.log,我可以看到完美的JSON输出到控制台。

有什么想法吗?

动作:

public ActionResult Add(MyViewModel model)
{
//stuff
}

JS:

<script type="text/javascript">
var model = @Html.Raw(Viewbag.MyJSON);

var viewModelDetails = ko.mapping.fromJS(model);

this.addData = function() {
var data = ko.toJSON(viewModelDetails);
console.log(data);
$.post("/user/add", data, function(result){
//stuff
});
}
</script>

模型

public  MyViewModel()
{
Game Game{get;set;}
}

编辑:

哇,我感到愚蠢,我有private set,所以这就是它没有受到限制。

3 个答案:

答案 0 :(得分:1)

尝试一下:

$.post("/user/add", data, function(result){
//stuff
}, dataType: json);

我过去发生的事情是,默认的dataType不是Json,所以它没有正确传递它。可能不是这里发生的事情......

答案 1 :(得分:1)

您必须将数据转换为json JSON.stringify(result)

<script type="text/javascript">
var model = @Html.Raw(Viewbag.MyJSON);

var viewModelDetails = ko.mapping.fromJS(model);

this.addData = function() {
var data = ko.toJSON(viewModelDetails);
console.log(data);
$.post("/user/add", JSON.stringify(data), function(result){
//stuff
}, 
dataType: json,
traditional: true

);
}
</script>

答案 2 :(得分:1)

我之前遇到过这样的问题。我与你分享我所做的解决方案。

进行如下更改

var data = ko.toJS(viewModelDetails);

注意:为了在没有本机JSON序列化程序的旧版浏览器(例如,IE 7或更早版本)上工作,您还必须引用json2.js库

我知道工作正常。如果解决您的问题,请将其标记为回答

如果对您有用,请点击上行链接

代码中的问题是什么: -

var data = ko.toJSON(viewModelDetails);

您需要再次将数据解析为json,然后才能使用它,否则会出错。