Во время игры с новой инструментами приложений с одной страницей MVC 4 я заметил, что ни один из примеров, которые я нашел, не содержит пример обновления DateTime через WebApi. Вскоре я узнал, почему.MVC 4 Single Page Application and DateTime
Я начал с создания стандартного SPA из предоставленного шаблона. Затем я открыл TodoItem.cs и добавил поле DateTime. Затем я сгенерировал контроллер, как описано в комментариях. (Без поля datetime все работает отлично).
После того, как все сгенерировано, я запустил приложение и перешел к указателю контроллера (я назвал задачи «контроллера»). Я получил страницу сетки с 0 записями, как ожидалось, и нажал кнопку добавления. Я был взят на страницу редактирования, как и ожидалось, и ввел некоторые данные, включая дату в моем блестящем новом поле datetime. Затем нажмите «Сохранить».
была произведена ошибка, которая говорит:
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.
Казалось бы, что инструмент не поддерживает DateTime еще. Я уверен, что смогу пройти и потратить немного времени на то, чтобы понять это и заставить его работать, но я подумал, что могу найти здесь немного удачи с тем, кто уже исправил эту проблему и может дать представление.
Кто-нибудь уже боролся с этим?
Обновление: добавляю больше информации, которую я нашел с момента запроса. Я попытался использовать JSON.Net в качестве моего Formatter, как предложено ниже. Я думаю, что это будет окончательное решение, однако, просто делать, поскольку предложенный ниже плакат недостаточно.
При использовании сериалайзера Json.NET, я получаю следующее сообщение об ошибке:
This DataController does not support operation 'Update' for entity 'JObject'.
Причина заключается в том, что JSON.Net не полностью заполнить объект, который форматировщик пытается deserailize к (системе. Web.Http.Data.ChangeSet).
JSON, который отправляется в это:
[{"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}
}]
Встроенный Json Formatter способен воссоздать этот JSon в объект с Embeded набор изменений объектов TodoItem в Сущности и OriginalEntity полей.
Кто-нибудь получил JSON.Net для десериализации этого правильно?
Показать код, позволяющий воспроизвести вашу проблему, действительно будет полезен. –
К сожалению, мне нужно будет предоставить все решение. Приведенный шаблон приложения одной страницы генерирует много кода. Чтобы воспроизвести ошибку, просто создайте новое приложение с одной страницей MVC 4. Как только инструмент закончит, откройте TodoItem.cs и добавьте поле datetime. Затем щелкните правой кнопкой мыши «Контроллеры» и добавьте контроллер. Выберите имя для него, выберите TodoItem в качестве модели, шаблон SPA и создайте новый контекст. Как только это будет сделано, запустите приложение и перейдите к новому контроллеру. Нажмите «Добавить» и введите данные, затем нажмите «Сохранить». –