0

私はノックアウトとmvcを初めて使用するので、助けが必要です.ドロップダウンリストがサーバーから正常に読み込まれており、保存ボタンをクリックするとコントローラーでSaveメソッドが呼び出されます. しかし、問題は、コントローラーでjsonデータを受信できない、つまりnullであることです。ここに私のコードが表示されています

    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} を保存しました", "成功しました"); return Json(new { メッセージ }); }

string someData は常に null であり、json データが期待されます。

4

2 に答える 2

0

データ内のに置き換えthisself、フィールド名を導入し、contentTypeを削除してみてください。

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

あなたの場合、メソッドのコンテキストは、オブジェクトから、メソッドを呼び出したhtml要素またはウィンドウに変更できます。

于 2013-02-14T19:23:05.600 に答える
0

問題は解決された。問題はコントローラー側にあり、コントローラーのアクションでは、jsonを手動で解析する代わりに同じモデルクラスを渡します。

于 2013-03-01T20:11:10.450 に答える