Khi chơi xung quanh với công cụ ứng dụng trang đơn mới của MVC 4, tôi nhận thấy rằng không có ví dụ nào tôi tìm thấy chứa ví dụ về DateTime được cập nhật trở lại thông qua WebApi. Tôi sớm tìm ra lý do.MVC 4 Single Page Application và DateTime
Tôi bắt đầu bằng cách tạo SPA tiêu chuẩn từ mẫu được cung cấp. Sau đó tôi mở TodoItem.cs và thêm một trường DateTime. Sau đó, tôi tạo ra bộ điều khiển theo hướng dẫn của các bình luận. (Nếu không có trường datetime, mọi thứ hoạt động tốt).
Sau khi mọi thứ được tạo, tôi khởi động ứng dụng và điều hướng đến chỉ mục bộ điều khiển (tôi gọi là bộ điều khiển "tác vụ"). Tôi đã nhận được trang lưới với 0 hồ sơ như mong đợi và nhấp vào nút thêm. Tôi đã được đưa đến trang chỉnh sửa như mong đợi và đã nhập một số dữ liệu bao gồm một ngày trong trường datetime mới sáng bóng của tôi. Sau đó nhấp vào lưu.
lỗi được sản xuất mà nói:
Server error: HTTP status code: 500, message: There was an error deserializing the object of type System.Web.Http.Data.ChangeSetEntry[]. DateTime content '01/01/2012' does not start with '/Date(' and end with ')/' as required for JSON.
Nó sẽ xuất hiện mà các dụng cụ không hỗ trợ DateTime được nêu ra. Tôi chắc chắn rằng tôi có thể trải qua và dành một chút thời gian để tìm ra và làm cho nó hoạt động, nhưng tôi nghĩ tôi có thể thấy một chút may mắn ở đây với một người đã khắc phục vấn đề này và có thể cung cấp thông tin chi tiết.
Bất kỳ ai đã chiến đấu với điều này?
Cập nhật: Tôi đang thêm nhiều thông tin hơn mà tôi đã tìm thấy kể từ khi yêu cầu điều này. Tôi đã thử sử dụng JSON.Net làm Formatter của tôi như được đề xuất bên dưới. Tôi nghĩ rằng đó sẽ là giải pháp cuối cùng, tuy nhiên, chỉ cần làm như áp phích dưới đây được đề nghị là không đủ.
Khi sử dụng serializer JSON.Net, tôi nhận được lỗi sau:
This DataController does not support operation 'Update' for entity 'JObject'.
Lý do là JSON.Net không cư đầy đủ các đối tượng formatter đang cố gắng để deserailize (System. Web.Http.Data.ChangeSet).
Các json được gửi trong là:
[{"Id":"0",
"Operation":2,
"Entity":
{"__type":"TodoItem:#SPADateProblem.Models",
"CreatedDate":"/Date(1325397600000-0600)/",
"IsDone":false,
"Title":"Blah",
"TodoItemId":1},
"OriginalEntity":
{"__type":"TodoItem:#SPADateProblem.Models",
"CreatedDate":"/Date(1325397600000-0600)/",
"IsDone":false,
"Title":"Blah",
"TodoItemId":1}
}]
Việc xây dựng trong Json Formatter có thể để pha Json này vào một đối tượng changeset với các đối tượng TodoItem embeded trong Entity và các lĩnh vực OriginalEntity.
Có ai đã nhận JSON.Net để deserialize điều này đúng không?
Hiển thị một số mã cho phép tái tạo sự cố của bạn sẽ thực sự hữu ích. –
Thật không may, tôi sẽ cần phải cung cấp toàn bộ giải pháp. Mẫu Ứng dụng Trang Đơn được cung cấp tạo ra rất nhiều mã. Để tạo lại lỗi, chỉ cần tạo một ứng dụng MVC 4 Single Page mới. Khi công cụ kết thúc, hãy mở TodoItem.cs và thêm trường datetime. Sau đó kích chuột phải vào "Bộ điều khiển" và thêm một bộ điều khiển. Chọn tên cho nó, chọn TodoItem làm mẫu của bạn, mẫu SPA và để cho nó tạo ra một ngữ cảnh mới. Khi đã xong, chạy ứng dụng và điều hướng đến bộ điều khiển mới. Nhấp vào thêm và nhập dữ liệu, sau đó nhấp vào lưu. –