Knockout.js KnockoutJS模型属性未发送到服务器

Knockout.js KnockoutJS模型属性未发送到服务器,knockout.js,Knockout.js,我有一个使用KnockoutJS和jQuery的ASP.NETMVC应用程序 我的KnockoutJS模型如下所示: var jsonPass = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(this.Model.ExitPass, Newtonsoft.Json.Formatting.Indented, jsonSettings)); var ExitPass = function(exitPass) {

我有一个使用KnockoutJS和jQuery的ASP.NETMVC应用程序

我的KnockoutJS模型如下所示:

    var jsonPass = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(this.Model.ExitPass, Newtonsoft.Json.Formatting.Indented, jsonSettings));

        var ExitPass = function(exitPass) {
            var self = this;
            self.incidentId = ko.observable(exitPass.IncidentId || 0);
            self.employeeId = ko.observable(exitPass.EmployeeId || 0);
            self.employerId = ko.observable(exitPass.EmployerId || 0);
            self.employerDesc = ko.observable(exitPass.EmployerDesc);
            self.employeeNumber = ko.observable(exitPass.EmployeeNumber);
            self.employeeName = ko.observable(exitPass.EmployeeName);
            self.createdByName = ko.observable(exitPass.CreatedByName);
            self.incidentDate = ko.observable(exitPass.IncidentDate);
            self.incidentCode = ko.observable(exitPass.IncidentCode);
            self.incidentCodeDesc = ko.observable(exitPass.IncidentCodeDesc);
            self.incidentTypeId = ko.observable(exitPass.IncidentTypeId || 0);
            self.incidentType = ko.observable(exitPass.IncidentType);
            self.permitType = ko.observable(exitPass.PermitType);
            self.outHour = ko.observable(exitPass.OutHour);
            self.inHour = ko.observable(exitPass.InHour);
            self.place = ko.observable(exitPass.Place);
            self.subject = ko.observable(exitPass.Subject);
            self.securityStaffId = ko.observable(exitPass.SecurityStaffId || 0);
            self.authorizer = ko.observable(exitPass.Authorizer || 0);
            self.notes = ko.observable(exitPass.Notes);
        };
var App = function (exitPassData) {

                var self = this;

                self.exitPass = new ExitPass(exitPassData);

            };

            var appViewModel = new App(jsonPass);

            ko.applyBindings(appViewModel);
// save method
 $.ajax({

     url: '@Url.Content("~/Incident/UpdateExitPass")/',
     type: 'POST',
     contentType: 'application/json',
     dataType: 'json',
     data: ko.toJSON(appViewModel.exitPass),
     success: function(response) {

     },
     error: function(xhr, ajaxOptions, thrownError) {

     }
 });
当我使用ajax保存到服务器时,我会这样做:

    var jsonPass = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(this.Model.ExitPass, Newtonsoft.Json.Formatting.Indented, jsonSettings));

        var ExitPass = function(exitPass) {
            var self = this;
            self.incidentId = ko.observable(exitPass.IncidentId || 0);
            self.employeeId = ko.observable(exitPass.EmployeeId || 0);
            self.employerId = ko.observable(exitPass.EmployerId || 0);
            self.employerDesc = ko.observable(exitPass.EmployerDesc);
            self.employeeNumber = ko.observable(exitPass.EmployeeNumber);
            self.employeeName = ko.observable(exitPass.EmployeeName);
            self.createdByName = ko.observable(exitPass.CreatedByName);
            self.incidentDate = ko.observable(exitPass.IncidentDate);
            self.incidentCode = ko.observable(exitPass.IncidentCode);
            self.incidentCodeDesc = ko.observable(exitPass.IncidentCodeDesc);
            self.incidentTypeId = ko.observable(exitPass.IncidentTypeId || 0);
            self.incidentType = ko.observable(exitPass.IncidentType);
            self.permitType = ko.observable(exitPass.PermitType);
            self.outHour = ko.observable(exitPass.OutHour);
            self.inHour = ko.observable(exitPass.InHour);
            self.place = ko.observable(exitPass.Place);
            self.subject = ko.observable(exitPass.Subject);
            self.securityStaffId = ko.observable(exitPass.SecurityStaffId || 0);
            self.authorizer = ko.observable(exitPass.Authorizer || 0);
            self.notes = ko.observable(exitPass.Notes);
        };
var App = function (exitPassData) {

                var self = this;

                self.exitPass = new ExitPass(exitPassData);

            };

            var appViewModel = new App(jsonPass);

            ko.applyBindings(appViewModel);
// save method
 $.ajax({

     url: '@Url.Content("~/Incident/UpdateExitPass")/',
     type: 'POST',
     contentType: 'application/json',
     dataType: 'json',
     data: ko.toJSON(appViewModel.exitPass),
     success: function(response) {

     },
     error: function(xhr, ajaxOptions, thrownError) {

     }
 });
我遇到的问题是一些属性没有发送到服务器,例如“
authorizer
”没有发送到服务器。我已经检查了使用开发者工具(Chrome)和请求负载的情况:

“授权人”是保留字吗?有线索吗

我想我发现了这个问题,并且与HTML绑定元素有关:

  <div class="form-group">
                        <label>Authorizer</label>
                        <select id="cboAuthorizer" class="form-control" data-bind="value: exitPass.authorizer">
                        </select>
                    </div>

授权人
我这样做了,如果我删除
数据绑定
元素,那么我可以在有效负载中看到属性

有线索吗


能否在html中尝试$root.authorizer而不是exit.authorizer?复制品。请注意
数据绑定
属性的使用-特别是
选项
的顺序(在上面的示例中,您没有包括
选项
,您在使用它吗?)。还要注意的是,
ko.toJSON
不包括带有空值的元素,正如在回答的注释中提到的那样。