这次我遇到了映射客户端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]放在服务器端模型之上但没有结果。
请告知可能会对此产生什么影响以及如何解决? 感谢。
答案 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("");
}
在我的行动中,我收到空... 我现在完全被困了......