2016-03-04 74 views
0

将日期提交给控制器时出现问题。获取最小日期提交给控制器时

日期以JSON格式发送日期格式(ex: /Date(1456592400000)/)。然后使用Knockout自定义绑定和momentjs,将日期转换为'DD/MM/YYYY'格式。

日期选择器正确显示日期为'28/02/2016',但是当我将它发送回控制器时,日期值为'01/01/0001 0:00:00',导致模型无效。

提交之前,我检查了控制台,日期是"2016-02-27T17:00:00.000Z"。但是如果我不使用Knockout自定义绑定,只使用值绑定,它就可以工作。

我尝试修改模型绑定格式化日期,在此post描述,但它仍然无法正常工作。

public class DateTimeBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 
     bindingContext.ModelState.SetModelValue(bindingContext.ModelName, value); 

     return value.ConvertTo(typeof(DateTime), CultureInfo.CurrentCulture); 
    } 
} 

我已经设置了文化身份的ID在web.config

<globalization uiCulture="id-ID" culture="id-ID" /> 

我该如何解决这个问题? 以下是jsfiddle来描述问题。

+0

你需要时间,以及在控制器结束了吗?方法1)如果你需要日期部分只是做'分裂(“T”)'和发送日期部分。方式2)控制器,使其作为字符串后做一个条件toDateTime转换。干杯 –

回答

0

您在控制台中看到的时间和发送到服务器的时间(2016-02-27T17:00:00.000Z)是转换为UTC的所选日期的ISO 8601表示。

所以在模型绑定需要相应地对待它:

public class DateTimeBinder : IModelBinder 
{ 
    var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 
    if(value == null) 
    { 
     return base.BindModel(controllerContext, bindingContext); 
    } 

    DateTime date; 
    if (DateTime.TryParse(value.AttemptedValue, null, DateTimeStyles.RoundtripKind, out date)) 
    { 
     return date.ToLocalTime(); //will convert the dateTime to your local time 
    } 

    return base.BindModel(controllerContext, bindingContext); 

}