2011-12-15 13 views
6

Mam formularz zawierający datę i datetime murawę:Client-side nieaktualne input type nie działa

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

Model:

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

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

Korzystając z tych typów wejściowych iPad pokazuje ładny sortowniki daty (czasu). Pola są sprawdzane za pomocą walidacji po stronie klienta. Dla pola datetime (A) działa, ale pole daty (B) spowoduje błąd: "wprowadź poprawną datę." Jak rozwiązać ten problem?

Przykłady:

  • to IPAD (Safari) wartość datetime jest poprawna (zgodnie MVC walidacji po stronie klienta): 15, rozkład. 2011 9:20
  • Ta wartość dla iPada (Safari) jest niepoprawna: 15 grudnia. 2011

Trudno debugować kod na iPadzie, więc nie mam pojęcia, jak Safari zmienia format daty podczas ustawiania atrybutu wartości wejścia.

Edytuj: Odkryłem, że format datetime to uniwersalny format datetime (yyyy-MM-DDTHH:mmZ), a format daty to yyyy-MM-dd. Prawdopodobnie walidator po stronie klienta rozumie uniwersalny datetime, a nie yyyy-MM-dd ze względu na lokalizację.

+0

Proszę podać przykład wejście do 'B' która podnosi„Proszę podać poprawną datę”błąd, ale to rozważyć ważność. – phoog

+0

@ Komentarz usunięty Guillaume: jest prawidłowy HTML, ale nie jest obsługiwany przez każdą przeglądarkę. Ponieważ iPad obsługuje te typy danych wejściowych, używam go tylko w widoku iPada. W zwykłych przeglądarkach używam selektora datetime jQuery. – Marthijn

+0

type = "date" jest nowy w HTML5. Jaki jest Twój typ docty? http://dev.w3.org/html5/markup/input.html – Guillaume

Odpowiedz

4

Miałem dokładnie ten sam problem i byłem szalony, nie do wiary, przeglądając stronę mobilną, którą rozwijam na moim iPhonie. Dyskusja w poniższym numerze rozwiązała to dla mnie.

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

Ponadto, aby przejść dystans z tym w sposób jednolity, stworzyłem następujące maszynki szablonu edytora dla typów danych Data:

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

i poręczną metodę rozszerzenia karmić HTML 5 data input type A Format to lubi pracować ze według spec for input type=date:

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

    return d.Value.ToString("yyyy-MM-dd"); 
} 
Powiązane problemy