Leo*_*eon 4 javascript asp.net jquery asp.net-mvc-3
我一直在努力解决这个问题.我正在尝试向客户端发送一个对象.一旦客户端更新了对象,我想将其发布回服务器并将其保存在我的数据库中.第一部分工作正常.但是,当我发回它时,所有日期都搞砸了并开始了0001年.我认为这是因为它无法反序列化日期.我可以发布一个带有日期属性的json对象,并使用asp.net mvc 3将其反序列化为服务器上的类型吗?
小组是
public class Group
{
public Group();
public string CreatedBy { get; set; }
public DateTime CreatedOn { get; set; }
public string Description { get; set; }
public string Name{ get; set; }
public string Status { get; set; }
public string UpdatedBy { get; set; }
public DateTime UpdatedOn { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
而
public JsonResult updateGroup(Group group)
{
var result = Repository.updateGroup(group);
return Json(result, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)
我得到了客户
$.ajax({
url: '../updateGroup',
type: 'POST',
data: JSON.stringify(group),
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function(){ success(); }
});
Run Code Online (Sandbox Code Playgroud)
ASP.NET MVC 3使用JavaScriptSerializer反向反序列化值.引用本课程的文档:
日期对象,以JSON表示为"\ /日期(刻度数)\ /".刻度数是一个正或负的长值,表示自UTC时间1970年1月1日午夜以来经过的刻度数(毫秒).
支持的最大日期值为MaxValue(12/31/9999 11:59:59 PM),支持的最小日期值为MinValue(1/1/0001 12:00:00 AM).
这基本上意味着您的请求对象必须看起来像这样:
{ CreatedOn: '\/Date(1299098853123)\/', CreatedBy: 'foo', ... }
Run Code Online (Sandbox Code Playgroud)
所以这是你如何进行的:
// taking the local time but this could be any javascript Date object
var now = new Date();
var group = {
CreatedBy: 'foo',
CreatedOn: '\/Date(' + now.getTime() + ')\/',
Description: 'some description',
Name: 'some name',
etc...
};
Run Code Online (Sandbox Code Playgroud)
当然,因为我们现在正在使用UTC,如果您需要使用本地时间(首选UTC),请不要忘记补偿服务器上的本地时间:
public ActionResult UpdateGroup(Group group)
{
DateTime serverCreatedOn = group.CreatedOn.ToLocalTime();
...
}
Run Code Online (Sandbox Code Playgroud)
也不要像这样硬编码网址:
url: '../updateGroup'
Run Code Online (Sandbox Code Playgroud)
在处理网址时始终使用网址帮助程序,或者在发货时可能会出现意外情况:
url: '@Url.Action("updateGroup")'
Run Code Online (Sandbox Code Playgroud)
更新:
尝试编码这样的日期:
// taking the local time but this could be any javascript Date object
var now = new Date();
var group = {
CreatedBy: 'foo',
CreatedOn: now.toUTCString(),
Description: 'some description',
Name: 'some name',
etc...
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2396 次 |
| 最近记录: |