Как предотвратить изменение формата даты в представлении после сохранения в ASP MVC - PullRequest
0 голосов
/ 13 декабря 2018

После сохранения DateTime в контроллере, я передаю его обратно в View, но когда он отображается в поле зрения, значение становится /Date(1545062400000)/.

Я уже проверил в контроллере в процессе, еслиданные были изменены, но не изменились, так как я просто передаю viewmodel в view.

[HttpPost]
    public ActionResult UpdateHeader(RecordViewModel recordViewModel)
    {
        var ResultMessage = "";
        if (ModelState.IsValid)
        {
            Record record = (from c in context.Records
                                           where c.RecordId == recordViewModel.RecordId
                                           select c).FirstOrDefault();
            if (record == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            record.Description = recordViewModel.Description;
            record.Date = recordViewModel.Date;
            record.Remarks = recordViewModel.Remarks;
            try
            {
                context.SaveChanges();
                ResultMessage = "Record successfully updated.";
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", ErrorHelper.GetInnerException(ex));
                ResultMessage = "Error: " + ErrorHelper.GetInnerException(ex);
            }
        }
        var result = new { Model = recordViewModel, ResultMessage = ResultMessage };
        return Json(result, JsonRequestBehavior.AllowGet);
    }

Угловой

self.submitEdit = function () {
        var updateRecordHeader = RecordServices.updateRecordHeader(self.header)
        .then(function successCallback(response) {
            self.header = response.data.Model;
            self.header.ResultMessage = response.data.ResultMessage;
        }, function errorCallback(response) { toastr.error(response.statusText); });
    }

1 Ответ

0 голосов
/ 13 декабря 2018

Начиная с RFC7519"эпоха" (01 января 1970 г.), отметка /Date(1545062400000)/ известна как отметка даты, использующая формат отметки времени UNIX, который нельзя напрямую использовать в качестве объекта JS Date без его предварительного преобразования.Причина использования тиков заключается в том, что формат JSON не имеет специального представления для структуры DateTime при сериализации в простые строки (см. эту ссылку ).

Вы можете создать пользовательскую функциючтобы преобразовать тики в объект JS Date:

function toJSDate(value) {
   var regex = /Date\(([^)]+)\)/;
   var results = regex.exec(value);
   var date = new Date(parseFloat(results[1])); // or parseInt
   return date;
}

Или еще проще без регулярных выражений, просто выбирая числовые значения следующим образом:

function toJSDate(value) {
   var date = new Date(parseFloat(value.substring(6))); // or parseInt
   return date;
}

Затем используйте эту функцию для ticks-to-преобразование даты:

// example
var header = response.data.Model;
var dateObject = toJSDate(header.Date);

// assign date object afterwards

Обратите внимание, что вам может потребоваться создать другую структуру объекта, которая будет иметь вид response.data.Model, но с использованием свойства Date на стороне сервера с объектом даты JS.

В качестве альтернативыВы можете создать свойство string только для получения, которое использует ToString() для преобразования значения DateTime в желаемое строковое представление, а затем использовать его внутри JS.

Примечание:

Избегайте использования имени свойства viewmodel, которое точно соответствует именам и объектам встроенных функций JS (т.е. Date) для ясности.

Связанные проблемы:

Как мне оформитьдата Microsoft JSON?

Преобразование .NET DateTime в JSON

...