ASP.NET web api和淘汰js视图模型数据未从客户端绑定到服务器



我在将数据从jquery ajax帖子发布到asp.net web api方法时遇到问题。日期属性显示在web控制台中,由两个双引号包围,然后重置,布尔属性设置为null。

Javascript:

self.startTime = ko.observable(startTime); 
    self.startTimeDate = ko.computed({
        read: function() {
            return moment(self.startTime()).format("MM-DD-YYYY HH:MM:ss");
        },
        write: function(value){
            self.startTime(moment(value).format("MM-DD-YYYY HH:MM:ss"));
        }
    });
    self.endTime = ko.observable(endTime); 
    self.endTimeDate = ko.computed({
        read: function () {
            return moment(self.endTime()).format("MM-DD-YYYY HH:MM:ss");
        },
        write: function (value) {
            self.endTime(moment(value).format("MM-DD-YYYY HH:MM:ss"));
        }
    });

self.includeDeviceAddedToInventory = ko.observable(true); 
var model = {
            auditLogType: ko.toJSON(self.auditLogType),
            id: ko.toJSON(self.auditLogId),
                entriesPerPage: ko.toJSON(self.entriesPerPage), 
                    pageNumber: ko.toJSON(self.pageNumber), 
                startTime: ko.toJSON(self.startTimeDate), 
                    endTime: ko.toJSON(self.endTimeDate), 
                    includeDeviceAddedToInventory: ko.toJSON(self.includeDeviceAddedToInventory) 
...
$.post("api/AuditLog", { filterInfo: model })

javascript控制台将对象显示为:

每页条目数:"0",页码:"0",endTime:"10-01-2014 06:10:00",开始时间:"10-01-2014 06:10:00",includeDeviceAddedToInventory:"true"

但是,.net调试器将对象显示为:每页项目数:0,页码:0,endTime:{1/1/0001 12:00:00 AM},startTime:{1/1/0001 12:00:00 AM},空

ASP.NET

public class PostModel
    {
public int EntriesPerPage { get; set; }
        public int PageNumber { get; set; }
        public DateTime StartTime { get; set; }
        public DateTime EndTime { get; set; }
        public string IncludeDeviceAddedToInventory { get; set; }
}
    public HttpResponseMessage Post(PostModel filterInfo)
            {

我尝试过使用newtonsoft-webapi属性进行序列化,但没有成功。不过,语法可能不正确。有人能寄样品或帮忙吗?

谢谢。

应用于字符串的ko.toJSON(和底层JSON.stringify)将用双引号将其括起来(它们将是结果的一部分):
ko.toJSON("aaa") = ""aaa""

当对象的一个成员是ko.toJSON的结果,并且该对象也被序列化为JSON(当发送到服务器时)时,您也会有这些额外的引号。解决方案很简单,不单独序列化属性,创建具有实际值的对象并发送它,它将作为一个整体进行序列化:

var model = {
    auditLogType: self.auditLogType,
    id: self.auditLogId,
    entriesPerPage: self.entriesPerPage, 
    pageNumber: self.pageNumber, 
    startTime: self.startTimeDate, 
    endTime: self.endTimeDate, 
    includeDeviceAddedToInventory: self.includeDeviceAddedToInventory 
...
$.post("api/AuditLog", { filterInfo: model })

最新更新