1

Я хочу исключить часть time в текстовое поле DateTime, но я не могу заставить ее работать так, как я хочу.Неправильный DateFormat с JQuery Datepicker

Это, как настроить поле:

@Html.TextBoxFor(m => m.DateFrom, "{0:dd/MM/yyyy}", new { @class = "datefrom" }) 
@Html.TextBoxFor(m => m.DateTo, "{0:dd/MM/yyyy}", new { @class = "dateto" }) 

Jquery скрипт:

$(function() { 
     $(".datefrom").datepicker({ 
      defaultDate: "+1w", 
      changeMonth: true, 
      numberOfMonths: 1, 
      dateFormat: "dd/mm/yy", 
      onClose: function (selectedDate) { 
       $("#to").datepicker("option", "minDate", selectedDate); 
      } 
     }); 
     $(".dateto").datepicker({ 
      defaultDate: "+1w", 
      changeMonth: true, 
      numberOfMonths: 1, 
      dateFormat: "dd/mm/yy", 
      onClose: function (selectedDate) { 
       $("#from").datepicker("option", "maxDate", selectedDate); 
      } 
     }); 
    }); 

Теперь у меня есть эти проблемы:

  • time всегда появляются в поле:

enter image description here

  • в date format неправильно: мой формат дд/мм/гггг, дата November 8th 2014 но теперь DatePicker «думает» это August 10th 2014. Поэтому, когда я выбираю произвольную дату из DatePicker по формату dd/MM/yyyy, asp.net будет treate его с форматом MM/dd/yyyy

То, что я пробовал:

  • Я пытался использовать DataAnnotations: [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] : не работал

  • Я попытался удалить скрипт Jquery, не работал

P/S: Althought даты и времени текстовое поле содержит time часть при первой загрузке, после выбора даты из DatePicker, то time часть ушла, но дата находится в неправильном формате, как я уже упоминалось выше:

enter image description here

+1

Примечание '[DisplayFormat (ApplyFormatInEditMode = истина)]' является только в том случае, если вы используете '@EditorFor() 'поэтому его не нужно в вашем случае. Ваш код для' @ Html.TextBoxFor() 'отлично выглядит и работает для меня, поэтому что-то другое вызывает проблему. –

+0

@StephenMuecke: теперь он отображается правильно, но когда я нажал кнопку отправки , значение, отправленное контроллеру, все еще находится в формате 'MM/dd/yyyy', headace! – NeedAnswers

+1

Какова культура в сервисе э? Он также должен соответствовать этому формату для правильной привязки даты. И установка '@Value = ...' не нужна - если вам нужно это сделать, возникает и другая проблема. –

ответ

1

Причина, по которой вы не указали правильную дату, заключается в том, что ваш datepicker использует формат dd/MM/yyy, но вы используете MM/dd/yyyy формат. Чтобы сделать эту работу, вы можете создать настраиваемое связующее устройство для обработки значений DateTime и проанализировать их в нужном формате.

public class CustomDateTimeBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
    var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 
    CultureInfo culture = new CultureInfo("en-GB"); // dd/MM/yyyy 
    var date = value.ConvertTo(typeof(DateTime), culture); 
    return date; 
    } 
} 

и зарегистрировать его в Global.asax (это означает, что она будет применяться ко всем DateTime значений

ModelBinders.Binders.Add(typeof(DateTime), new YourAssembly.CustomDateTimeBinder()); 
+0

Работал как очарование! Спасибо, Стивен !!!! – NeedAnswers