MVC控制器返回JSON对象日期属性"Now"“帮助”

本文关键字:quot Now 帮助 属性 返回 控制器 JSON 对象 日期 MVC | 更新日期: 2023-09-27 18:17:57

作为ASP的一部分。. NET MVC4 Web应用程序,我有一个客户端Javascript视图模型与"保存"功能,post到控制器:

PatientViewModel = function (data) {
    var self = this;
    ko.mapping.fromJS(data, {}, self);
    self.save = function () {
        $.ajax({
            url: "/Patient/Save/",
            type: "POST",
            data: ko.toJSON(self),
            contentType: "application/json",
            success: function (data) {
                if (data.patientViewModel != null) {                 
                    ko.mapping.fromJS(data.patientViewModel, {}, self);
                }
            }
        });
    }
}

在"成功"时,客户端期望包含使用KnockoutJS重新映射的原始视图模型的数据。下面的服务器端视图模型是映射的蓝图:

public class PatientViewModel
    {
        public int PatientId { get; set; }
        public string LastName { get; set; }
        public string FirstName { get; set; }
        public DateTime? DOB { get; set; }
        public string Address { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string Zip { get; set; }
        public string Phone { get; set; }
        public string PhoneAlternate { get; set; }
    }

注意类型为DateTime?的DOB属性。这是在客户端与所有其他属性一起设置的。

从客户端接收视图模型的控制器创建一个新的"Patient",并将其保存到数据库中。

        public JsonResult Save(PatientViewModel patientViewModel)
        {
            Patient patient = new Patient();
            patient.LastName = patientViewModel.LastName;
            patient.FirstName = patientViewModel.FirstName;
            patient.DOB = patientViewModel.DOB;
            patient.Address = patientViewModel.Address;
            patient.City = patientViewModel.City;
            patient.State = patientViewModel.State;
            patient.Zip = patientViewModel.Zip;
            patient.Phone = patientViewModel.Phone;
            patient.PhoneAlternate = patientViewModel.PhoneAlternate;
            _patientContext.Patients.Add(patient);
            _patientContext.SaveChanges();
            return Json(new { patientViewModel });
        }

当控制器返回其"JsonResult"时,结果包含DOB (DateTime?)属性设置为"Now"的原始视图模型,而不是从客户端接收到的日期和时间

其他属性与视图模型最初发送到控制器时保持相同。我对代码进行了调试和分步执行。DOB属性保存在return Json(new {patientViewModel} );点发送给它的日期,并且一旦它在客户端视图模型中击中success方法就更改为"现在"。

我错过了什么?

MVC控制器返回JSON对象日期属性"Now"“帮助”

感谢所有对我的问题提出意见和建议的人。

最后,事实证明,我的视图模型上的DateTime属性没有被设置为"现在";当客户端收到它时,它正在重置。

为什么它被重置?因为我用来重新序列化视图模型的Microsoft Json()方法没有返回一个ISO8601格式的Date Object。这是客户端所期望的格式,所以它尽其所能(即重置)。

Stackoverflow post ASP。. NET MVC JsonResult Date Format给出了这个问题的进一步解释和解决方案。

我添加了JSON。. NET到我的应用程序(绕过微软的Json方法),并改变了我的控制器的Save方法:

public ContentResult Save(PatientViewModel patientViewModel)
        {
            Patient patient = new Patient();
                              .
                              .
                              .
            string patVM = JsonConvert.SerializeObject(new { patientViewModel });
            return new ContentResult { Content = patVM, ContentType = "application/json" };
        }

日期现在填充相应的属性。再次感谢!