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
方法就更改为"现在"。
我错过了什么?
感谢所有对我的问题提出意见和建议的人。
最后,事实证明,我的视图模型上的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" };
}
日期现在填充相应的属性。再次感谢!