2013-08-04 14 views
3

我已經看到約1k這個帖子,但我一定錯過了一些東西。MVC4格式日期不驗證與DisplayFormat值

基本上,我試圖在我的網站中使用dd/MM/yyyy格式,驗證時發生問題。

我有一個視圖模型:

public class LoanBaseViewModel 
    { 
     public int LoanId { get; set; } 

     [Required] 
     [DataCompareValidation("ReturnDate", ErrorMessage = "Return date should be later than loan date")] 
     [DataType(DataType.Date)] 
     [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
     public DateTime LoanDate { get; set; } 


     [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
     [DataType(DataType.Date)] 
     public DateTime? ReturnDate { get; set; } 
} 

在我EditorTemplate我有這個:

@model System.Nullable<System.DateTime> 
@if (Model.HasValue) 
{ 
    @Html.TextBox("", String.Format("{0:dd/MM/yyyy}", Model.Value), new { @class = "jq-date" }) 
} 
else 
{ 
    @Html.TextBox("", "", new { @class = "jq-date" }) 
} 

在頁面加載我附上一個jQuery的DatePicker在JQ-日期。

$("#loanForm").find(".jq-date").datepicker({ dateFormat: 'dd/mm/yy' }); 

顯示效果還算不錯,但每次我試圖以節省時間,它告訴我,日期格式不正確,如果我使用DD/MM/YYYY日期。

任何想法爲什麼?

我一直在嘗試像一個小時,它讓我瘋狂!

感謝您的時間

湯姆

編輯: 沒有工作更好 什麼是真正奇怪的是,它在我的筆記本電腦的工作,而不是在我的桌面兩人都在DD/MM/YYYY顯示日期,我的筆記本電腦接受25/08/2013但不是我的桌面...

編輯: 解決方案是在這裏:stackoverflow.com/a/13528769/1741443。

回答

2

如果沒有看到如何格式化jQuery datepicker,它有點難以明確回答。 jq-date的默認返回值是mm/dd/yy(所有數值數據)。

您設置的格式是字段相關格式;等待jQuery的字段以期望的格式將日期傳遞給它。字段級的格式不適用於jQuery - 這是一個單獨的格式要求。

  1. 我建議你關閉/ false ApplyFormatInEditMode並查看日期字段是否與datepicker正常工作。

  2. 如果這不起作用,然後根據下面的格式化jq日期。

有關日期選擇器格式選項的詳細信息檢查API documentation或去this page

我敢肯定你已經在頁面上引用的兩個jQuery和jQuery UI的,但你應該包括以下定製該日期選擇器:

<script type="text/javascript"> 
$(function(){ 
$('.datepicker').datepicker({dateFormat: 'dd-M-yy'}); 
}); 
</script> 

在jQuery的格式上面的例子返回DD - 月份的兩位數天,男 - 簡稱爲一個月,YY - 四位數年份。

希望有所幫助。

+0

嗨,謝謝你的回答。我確實使用瞭如下的init日期選擇器:$(「#loanForm」)。find(「。jq-date」)。datepicker({dateFormat:'dd/mm/yy'});我不知道這是提高錯誤的日期選擇器,但更像是後期的數據驗證。 – Tom

+0

如果失敗了,你有沒有想過將你的文化設置從en-US改爲** en-GB **,這會立即爲你改變日期。 [http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.dataformatstring.aspx]引用格式方法顯示在en-US的默認示例中的事實,即mm/DD/YY。 – Springbokkie

+0

試過en-GB在我的桌面上沒有改變。但我的筆記本電腦正在接受dd/MM/yyyy日期。 – Tom

1

這可能是datepicker格式的問題。你可以像這樣初始化它

var dateTypeVar = $('#datepicker').datepicker('getDate'); 
$.datepicker.formatDate('dd-mm-yy', dateTypeVar); 

你也可以設置默認的日期時間格式。這裏有更多信息的鏈接

+0

感謝您的回答,我會明天嘗試,但我確實有jQuery日期選擇器$(「#loanForm」)中的init。find(「。jq-date」)。datepicker({dateFormat:'dd/mm/yy' });.我認爲它不會更好,如果我刪除日期選擇器,控制仍然驗證爲MM/dd/yyyy而我想要dd/MM/yyyy – Tom

+0

在代碼中的一個地方還有一件事情,您有MM/dd/yyyy在第二個你有dd/MM/yyyy –

+0

好點的第二個日期,我刪除日期選擇器,仍然無法正常工作,所以它確實是不顯眼的驗證所期望的格式不起作用。 – Tom

1

假設您的服務器的文化沒有被設置爲你想要使用的文化形式,你需要在你的網絡設置全球化設置。配置到您計劃使用的文化。我不知道你來自哪裏,但我會承擔英國。所以,你可以設置

<globalization culture="en-GB"/> 

這應該是下<system.web>

你也可以使用culture="auto",在這種情況下,文化將基於用戶瀏覽器的區域性設置進行選擇。

當這樣做,並使用[DataType]屬性,那麼你甚至不需要使用[DisplayFormat]屬性。

您也可以考慮使用HtmlAttributeProvider將jq-date屬性添加到您的日期類型中,然後根本不需要編輯器模板。請參閱:

http://blogs.msdn.com/b/ukadc/archive/2012/05/24/asp-net-mvc-adding-html-attributes-in-templated-helpers-editorfor.aspx

如果你的問題是嚴格對客戶端與jQuery的日期控件,然後確保你在一個jQuery的準備處理程序初始化它(你不需要形式的ID,或者查找,只需使用jquery選擇器中的類)。

$(function() { 
    $(".jq-date").datepicker({ dateFormat: 'dd/mm/yy' }); 
}); 
+0

真的完整答案謝謝。我添加了文化信息,但效果不佳。真奇怪的是,它在我的筆記本電腦上工作,但不在我的桌面上,他們都以dd/MM/yyyy顯示日期,我的筆記本電腦接受25/08/2013但不是我的桌面......到底是什麼? – Tom

+0

@Tom - 你在IIS中運行它嗎? IIS Express?開發服務器?什麼版本的jQuery?什麼是確切的錯誤? –

+0

我正在開發一個IIS express,Jquery 1.8。確切的錯誤:'貸款日期必須是日期'。當我在我的筆記本電腦上放了一個不好的日期時,我收到另一條消息'日期爲2013年6月29日不是有效日期' – Tom

0

添加下面這樣的代碼的Global.asax.cs文件

protected void Application_BeginRequest() {

CultureInfo info = new CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.ToString()); info.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy"; System.Threading.Thread.CurrentThread.CurrentCulture = info;

}

下<的System.Web >

<全球化文化添加下面的web.config =」 en-US「/ >