2011-12-15 127 views
6

我有一個包含一個日期和日期時間字段的一種形式:客戶端驗證不起作用

@Html.TextBoxFor(model => model.A, new { @type = "datetime" }) 
@Html.TextBoxFor(model => model.B, new { @type = "date" }) 

型號:

public class TestModel 
{ 
    [DataType(DataType.Date)] 
    public DateTime A {get;set;} 

    [DataType(DataType.Date)] 
    public DateTime B {get;set;} 
} 

通過使用這些輸入類型一個iPad示出了很好的日期(時間)選擇器。這些字段使用客戶端驗證進行驗證。對於日期時間字段(A)它有效,但日期字段(B)將引發錯誤:「請輸入有效日期。」我該如何解決這個問題?

實例:

  • 爲日期時間這ipad公司(Safari瀏覽器)值是有效的(根據MVC客戶端驗證):12月15日2011 9:20
  • 此iPad(Safari)的日期值無效:15十二月。 2011

很難在iPad上調試代碼,所以我不知道Safari如何在設置輸入值屬性時更改日期格式。

編輯: 我發現日期時間格式是通用日期時間格式(yyyy-MM-DDTHH:mmZ),而日期格式是yyyy-MM-dd。由於本地化,客戶端驗證程序可能理解通用日期時間而不是yyyy-MM-dd

+0

請給輸入的一個例子`B`是提高了「請輸入一個有效的日期」錯誤,但您認爲有效。 – phoog 2011-12-15 08:15:04

回答

4

我有完全相同的問題,並且在查看我在iPhone上開發的移動網站時無法置信。以下問題的討論爲我解決了這個問題。

https://github.com/jzaefferer/jquery-validation/issues/20

此外,要走的距離,這在一個無縫的方式,我創建了日期數據類型以下剃刀編輯模板:

@model DateTime? 
@Html.TextBox("myDate", ViewData.Model.ToIso8601FullDate(), new { type = "date", @class = "text-box single-line" }) 

和方便的擴展方法來喂HTML 5日期輸入類型格式它喜歡與根據spec for input type=date

public static string ToIso8601FullDate(this DateTime? d) 
{ 
    if (!d.HasValue) return null; 

    return d.Value.ToString("yyyy-MM-dd"); 
}