ASP.NET web api และข้อมูล viewmodel js ที่น่าพิศวงไม่ได้ผูกมัดจากไคลเอนต์ไปยังเซิร์ฟเวอร์

ฉันมีปัญหาในการโพสต์ข้อมูลจากโพสต์ jquery ajax ไปยังวิธี asp.net web api คุณสมบัติวันที่จะแสดงในเว็บคอนโซลที่ล้อมรอบด้วยเครื่องหมายคำพูดคู่สองตัว จากนั้นให้รีเซ็ตและคุณสมบัติบูลีนจะถูกตั้งค่าเป็นโมฆะ

จาวาสคริปต์:

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

คอนโซลจาวาสคริปต์แสดงวัตถุเป็น:

รายการPerPage: "0", pageNumber: "0", endTime: ""10-01-2014 06:10:00"", startTime: ""10-01-2014 06:10:00"", includeDeviceAddedToInventory: "true "

อย่างไรก็ตาม .net debugger จะแสดงอ็อบเจ็กต์เป็น: entryPerPage: 0, pageNumber: 0, endTime: {1/1/0001 12:00:00 AM}, startTime: {1/1/0001 12:00:00 AM}, โมฆะ

เอเอสพี.เน็ต

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 web api ซึ่งใช้งานไม่ได้ แม้ว่าไวยากรณ์อาจไม่ถูกต้องก็ตาม ใครช่วยกรุณาโพสต์ตัวอย่างหรือช่วยเหลือได้ไหม

ขอบคุณ


person test user 53    schedule 01.10.2014    source แหล่งที่มา
comment
เอาต์พุตคอนโซลจาวาสคริปต์ของคุณแสดงเครื่องหมายคำพูดเพิ่มขึ้นสองเท่าในช่วงวันที่ มันเป็นอย่างนั้นจริงๆ หรือพิมพ์ผิด?   -  person Mike_G    schedule 01.10.2014
comment
นั่นคือวันที่ปรากฏจริงๆ   -  person test user 53    schedule 01.10.2014
comment
นั่นจะอธิบายว่าทำไมมันถึงมาเป็นวันที่เริ่มต้น ฉันคิดว่ามันคิดว่าคุณส่งสตริงว่าง (และโดยทั่วไปจะทำให้รายการพารามิเตอร์ของคุณยุ่งเหยิง)   -  person Mike_G    schedule 01.10.2014


คำตอบ (1)


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 })
person manji    schedule 01.10.2014
comment
ขอบคุณสำหรับข้อมูลของคุณ สิ่งนี้ไม่ได้ผลสำหรับฉัน แต่ฉันยังคงเห็นวัตถุที่แสดงเหมือนกัน - person test user 53; 01.10.2014
comment
คุณสามารถดูได้ที่นี่ (jsfiddle) ผลลัพธ์ของการทำให้ซีเรียลไลซ์ออบเจ็กต์ที่มีคุณสมบัติซีเรียลไลซ์แล้วและอีกหนึ่งรายการด้วย ทรัพย์สินดิบ - person manji; 02.10.2014
comment
ขอบคุณสำหรับตัวอย่าง แต่ไม่ได้ใช้สิ่งที่สังเกตได้ นี่คือสิ่งที่ทำให้การใช้ ko.toJSON จำเป็นในสคริปต์ที่ฉันทำงานด้วย filterInfo: ko.toJSON(model) และ filterInfo: model ในโพสต์เริ่มต้นของฉันแสดงผลลัพธ์เดียวกันใน .net webapi - person test user 53; 02.10.2014