作为ASP.NET MVC4 Web应用程序的一部分,我有一个带有“保存”功能的客户端Javascript Viewmodel,该功能将POST发送到控制器:MVC控制器将JSON对象日期属性“changed”更改为“Now”
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; }
}
通知的DOB属性与类型的DateTime?
。这是在客户端以及所有其他属性上设置的。
从客户端接收视图模型的控制器会创建一个保存到数据库的新“患者”。
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(日期时间?)属性的原始视图模型。
其他属性与viewmodel最初发送到控制器时保持不变。我已经调试过并且遍历代码。 DOB属性保存在return Json(new {patientViewModel});
处发送给它的日期,并且只要它在客户端视图模型中碰到success
方法,就立即更改为“Now”。
我错过了什么?
您能否将构造函数显示给PatentViewModel? –
在Save方法的控制器中,出生日期字段是否正确绑定到patientViewModel中?当您将新患者保存到数据库时,问题是否存在? – Chad
目前没有PatientViewModel的构造函数。在访问客户端视图之前创建视图模型对象(PatientViewModel pm = new PatientViewModel();) –