在淘汰赛的ViewModel和MVC的模型之间映射问题

时间:2013-10-24 17:58:35

标签: asp.net-mvc jquery knockout.js model-binding

这次我遇到了映射客户端knockout.js的viewModel和服务器端MVC模型的问题。

所以重点是:

我有一个淘汰视图模型和一些方法。

例如,其中一个看起来像这样:

                    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);
                                    }
                                });
                    };

knockout viewModel和MVC的Model有相同的字段,唯一的区别是每个字段的第一个字母:knockout的字段以小写字母开头,MVC的Model字段以大写字母开头,例如: someField - SomeField

所以在我的情况下,我正在尝试使用上面提到的搜索方法向服务器发帖。在做之前我甚至检查viewModel是否有正确的数据,并且我成功显示了this.startDate() 但是当我将断点放在我的搜索操作的服务器端时,我可以看到我没有收到任何数据...... 这不仅仅是奇怪的。

最近我成功实施了一个我使用淘汰赛的项目,我没有遇到这个问题。

我甚至将[Serializable]放在服务器端模型之上但没有结果。

请告知可能会对此产生什么影响以及如何解决? 感谢。

2 个答案:

答案 0 :(得分:0)

MVC模型绑定器区分大小写。调整其中一个模型以匹配另一个模型,或使用KO映射。

答案 1 :(得分:0)

嗯,它变得越来越奇怪......

我创建了测试淘汰赛ViewModel(我在页面上使用了几个虚拟机):

            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]

这是我的服务器端型号:     [序列化]     公共类TestDataModel     {

    public string Name { get; set; }
}

这是我的行动:

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

在我的行动中,我收到空... 我现在完全被困了......