2014-11-08 129 views
1

我想排除DateTime文本框中的time部分,但我不能讓它按我想要的方式工作。錯誤的日期格式與jquery日期選擇器

這是我如何設置字段:

@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是錯誤的:我的格式爲DD/MM/YYYY,日期爲November 8th 2014但現在的日期選擇器 「認爲」 這是August 10th 2014。所以,當我選擇從格式dd/MM/yyyy的日期選擇任意日期,asp.net將與格式MM/dd/yyyy

湯治療這是我曾嘗試:

  • 我試圖用DataAnnotations[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] :沒有工作

  • 我試圖刪除jQuery腳本,沒有工作

P/S:althought日期時間文本框包含所述第一負載time部,選擇從日期選擇的日期之後,time部消失了,但日期是在錯誤的格式如我上面提到:

enter image description here

+1

注意'[DisplayFormat(ApplyFormatInEditMode =真)]'如果你使用'@EditorFor只適用() ''所以它沒有必要在你的情況下。你的'@ Html.TextBoxFor()'代碼看起來很好,適用於我,所以別的東西導致了這個問題。 – 2014-11-08 03:31:51

+0

@StephenMuecke:現在顯示正確,但是當我點擊提交按鈕,發送給控制器的值仍然是'MM/dd/yyyy'格式,令人頭疼! – NeedAnswers 2014-11-08 03:35:03

+1

服務器上的文化是什麼呃?它還需要匹配該日期格式才能正確綁定。並且不需要設置'@Value = ...' - 如果您需要這樣做,那麼還有其他問題。 – 2014-11-08 03:38:34

回答

1

您日期未被正確綁定的原因是您的日期選擇器使用的格式爲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

工作就像一個魅力!謝謝heappp Stephen! – NeedAnswers 2014-11-08 04:34:22