0

今回はクライアント側のknockout.jsのviewModelとサーバー側のMVCのModelをマッピングする問題に直面しました。

ポイントは次のとおりです。

ノックアウト ビューモデルといくつかのメソッドがあります。

たとえば、そのうちの1つは次のようになります。

                    this.search = function () {
                            $.ajax({
                                url: "@Html.Raw(@Url.Action("Search"))",
                                    type: 'POST',
                                    beforeSend: function () {
                                    },
                                    complete: function () {
                                    },
                                    data: ko.toJSON(this),
                                    cache: false,
                                    contentType: false,
                                    processData: false,
                                    success: function (result) {
                                        alert(result);
                                    }
                                });
                    };

ノックアウト ビューモデルと MVC のモデルには同じフィールドがあります。唯一の違いは各フィールドの最初の文字です: ノックアウト のフィールドは小文字で始まり、MVC のモデル フィールドは大文字で始まります。例: someField - SomeField

私の場合、上記の検索方法を使用してサーバーに投稿しようとしています。それを行う前に、viewModel に適切なデータがあるかどうかを確認し、this.startDate() を正常に表示しましたが、検索アクションのサーバー側にブレークポイントを配置すると、データを受信して​​いないことがわかります... 以上です。奇妙なより。

最近、ノックアウトを使用したプロジェクトの実装に成功しましたが、この問題はありませんでした。

[Serializable] をサーバー側モデルの上に配置しましたが、結果はありません。

これに何が影響するのか、どうすれば修正できるのかアドバイスをお願いします。ありがとう。

4

2 に答える 2

0

うーん、ますますおかしくなってきました…。

テスト ノックアウト ViewModel を作成しました (1 つのページで複数の VM を使用しています)。

            var testViewModel = function () {
                this.Name = ko.observable("");

                this.testsearch = function () {

                    $.ajax({
                        url: "@Html.Raw(@Url.Action("Test"))",
                                type: 'POST',
                                beforeSend: function () {
                                },
                                complete: function () {
                                },
                                data: ko.toJSON(this),
                                cache: false,
                                contentType: false,
                                processData: false,
                                success: function (result) {
                                    alert(result);
                                }
                            });
                };
            } 

  var testVM = new testViewModel();
  ko.applyBindings(testVM, $("#testSection")[0]);

これは HTML セクションです: [section id="testSection" style="background-color: white;"] [input data-bind="value: Name" /] [button type="button" class="btn btn- default" data-bind="click: testsearch"]テスト[/button]

   [/section]

これは私のサーバー側のモデルです: [Serializable] public class TestDataModel {

    public string Name { get; set; }
}

そして、これは私の行動です:

    public JsonResult Test(TestDataModel vm)
    {
        return Json("");
    }

そして、私の行動ではnullを受け取ります...私は今完全に立ち往生しています...

于 2013-10-25T05:27:17.467 に答える
0

MVC モデル バインダーでは、大文字と小文字が区別されます。モデルの 1 つを他のモデルと一致するように調整するか、KO マッピングを使用します。

于 2013-10-24T18:00:29.057 に答える