0

每次我发布到我的 Action 时,myViewModel不为空,但里面的所有值始终为空。

在我拥有的地方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,所以这就是它没有被束缚的地方。

4

3 回答 3

1

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

进行如下更改

var data = ko.toJS(viewModelDetails);

注意:要在没有原生 JSON 序列化程序的旧浏览器(例如 IE 7 或更早版本)上运行,您还必须引用 json2.js 库

我知道这会很完美。如果它解决了您的问题,请将其标记为答案

如果对您有用,请点击uplink

代码中的问题是什么:-

var data = ko.toJSON(viewModelDetails);

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

于 2013-02-18T06:36:20.830 回答
1

试试这个:

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

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

于 2013-02-18T00:23:07.320 回答
1

您必须将数据转换为 jsonJSON.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>
于 2013-02-18T00:32:06.307 回答