1

ノックアウトからmvc2コントローラーアクションにjsonを送信する際に問題が発生しました。これが私の見解です:

var ViewModel = {
            FirstName: ko.observable("FirstName"),
            LastName: ko.observable("LastName"),
            Save: function () {
                ko.utils.postJson(location.href, this);
            }
}
ko.applyBindings(ViewModel);

コントローラにアクションがあります:

public virtual ActionResult SomeAction(MyModel model) {
        //do smth
        return View(registrationModel);
}
public class MyModel {
   public string FirstName {get;set;}
   public string LastName {get;set;}
}

問題は、「\ "FirstName \"」のように引用符で囲まれた文字列値を取得していることです。これを回避する方法があることを知っています(MVC3でJSON.stringifyを使用)。私は次のことを試しました:

ko.utils.postJson(location.href, JSON.stringify({model: this});

また

var json = JSON.stringify({
FirstName: this.FirstName(),
LastName: this.LastName()
});
ko.utils.postJson(location.href, JSON.stringify({model: json});

また

ko.utils.postJson(location.href, json);

これら3つのオプションすべてで、model = null、またはControllerのすべての値がnullになります。

多分誰かが以前にこれをしたことがありますか?

4

1 に答える 1

1

MVCオブジェクトマッピングが機能するためには、POSTのコンテンツタイプを「application / json; charset=utf-8」に設定する必要があることがわかりました。これまでko.utils.postJson()を使用してこれを行ったことはありませんが、jQueryを使用した実際の例を次に示します。

    $.ajax({
        url: url,
        type: "POST",
        data: ko.toJSON(ViewModel),
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function (response) {
        },
        error: function (response, errorText) {
        }
    });

ko.toJSONモデルをJSONとしてシリアル化するために使用していることに注意してください。

于 2012-07-18T17:47:15.787 に答える