【问题标题】:Controller Action won't bind JSON ViewModel控制器动作不会绑定 JSON ViewModel
【发布时间】:2013-02-02 08:50:45
【问题描述】:

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

在我有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,所以它没有被绑定。

【问题讨论】:

  • 你可以在调用ko.toJSON 之后发布data 的JSON 吗?

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


【解决方案1】:

试试这个:

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

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

【讨论】:

    【解决方案2】:

    您必须将数据转换为 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>
    

    【讨论】:

      【解决方案3】:

      我以前遇到过这样的问题。我把我的解决方案分享给你。

      进行如下更改

      var data = ko.toJS(viewModelDetails);
      

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

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

      如果它对您有用,请点击uplink

      代码有什么问题:-

      var data = ko.toJSON(viewModelDetails);
      

      data需要再次解析为json,才能使用,否则会报错。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-06
        • 1970-01-01
        相关资源
        最近更新 更多