无法通过淘汰赛接收控制器中的json数据

时间:2013-02-14 17:46:50

标签: ajax json model-view-controller knockout.js

我是淘汰赛和mvc的新手,所以我需要一些帮助,我的问题是 我的下拉列表从服务器成功填充,并在单击保存按钮调用控制器中的保存方法。但问题是在控制器中我无法接收json数据,即它为空。这是我在视图中的代码

    var initialData = @Html.Raw( new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model)); 


    var viewModel = function(){
        var self = this;
        self.HomeAgencies = ko.observableArray(initialData.HomeAgencies);
        self.selectedOrgUnit = ko.observable();
        self.Save = function () {
                                    $.ajax({
                                    url: "@Url.Action("Save")",
                                    type: "POST",
                                    data: ko.toJSON(this),
                                    contentType: "application/json; charset=utf-8",
                                    dataType:"json",
                                    success: function(result) {alert(result.message)}
                                    });
                                }
    }

    var vm = new viewModel();
    ko.applyBindings(vm); 

在控制器中我有以下代码

public JsonResult Save(string someData)         {             var message = string.Format(“已保存{0}”,“已成功”);             返回Json(new {message});         }

string someData总是为null,我期待一些json数据。

2 个答案:

答案 0 :(得分:0)

尝试将this替换为self数据并引入字段名称并删除co​​ntentType。

$.ajax({
    url: '@Url.Action("Save")',
    type: 'POST',
    data: { someData: ko.toJSON(self) },
    dataType: 'json',
    success: function (result) { alert(result.message); }
});

在您的情况下,方法的上下文可以从您的对象更改为调用它们的方法或窗口的html元素。

答案 1 :(得分:0)

问题已解决。问题出在控制器端,在控制器的Action中传递相同的模型类而不是手动解析json。