And*_*rus 0 c# asp.net asp.net-mvc datetime asp.net-mvc-4
Gant图表以毫秒为单位将时间传递给MVC4控制器.下面的代码打印出1440190800000
$(".gantt").gantt({
onAddClick: function (dt, rowId) {
alert(dt);
window.location.href='NewBooking?' + $.param({
datetime: dt,
row: rowId
});
},
Run Code Online (Sandbox Code Playgroud)
MVC4控制器有签名:
public ActionResult NewBooking(DateTime datetime, string row)
{
var m = new NewBookingViewModel();
return View(m);
}
Run Code Online (Sandbox Code Playgroud)
调用此控制器会导致错误
The parameters dictionary contains a null entry for parameter 'datetime' of non-nullable type 'System.DateTime' for method 'System.Web.Mvc.ActionResult NewBooking(System.DateTime, System.String)' in 'Eeva.Erp.Controllers.BookingController'. An optional parameter must be a
since milliseconds are not contverted to datetime.
Run Code Online (Sandbox Code Playgroud)
如何在控制器代码或javascript中修复此问题以获取DateTime值?
毫秒不能代表日期.毫秒是用于测量持续时间的单位.因此,询问如何将持续时间转换为DateTime C#对象是没有意义的.
另一方面,自该时间的某个固定日期(如The Epoch)起经过的毫秒数可以表示DateTime.我不熟悉您正在使用的客户端库以及这些毫秒代表的内容,但为了本示例的目的,我们假设它们表示自1970年1月1日00:00:00 UTC时间以来经过的毫秒数.在这种情况下,您可以简单地将其转换为相应的DateTime对象:
public DateTime FromUnixTime(long unixTime)
{
var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return epoch.AddMilliseconds(unixTime);
}
Run Code Online (Sandbox Code Playgroud)
然后:
public ActionResult NewBooking(long datetime, string row)
{
DateTime someDate = FromUnixTime(datetime);
var m = new NewBookingViewModel();
return View(m);
}
Run Code Online (Sandbox Code Playgroud)
显然,可以进一步改进此代码,以便在自定义模型绑定器中进行此转换,然后控制器操作可以直接获取DateTime对象参数.
因此,现在由您和您正在使用的js库的文档来详细说明将这些毫秒转换为DateTime的精确算法.
| 归档时间: |
|
| 查看次数: |
1373 次 |
| 最近记录: |