2011-12-15 30 views
6

Tôi có một hình thức có chứa một ngày và datetime lĩnh vực:Client-side của ngày loại đầu vào không hoạt động

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

mẫu:

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

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

Bằng cách sử dụng các loại đầu vào một chiếc iPad cho thấy thoải mái bộ chọn ngày (giờ). Các trường được xác thực bằng cách sử dụng xác thực phía máy khách. Đối với trường ngày giờ (A) nó hoạt động, nhưng trường ngày (B) sẽ phát sinh lỗi: "vui lòng nhập ngày hợp lệ". Tôi giải quyết điều này như thế nào?

Ví dụ:

  • (Safari) giá trị iPad này cho datetime là hợp lệ (theo MVC xác nhận client-side): 15 tháng 12 2011 9:20
  • Giá trị iPad (Safari) này cho ngày không hợp lệ: 15 tháng 12. 2011

Thật khó để gỡ lỗi mã trên iPad, vì vậy tôi không biết làm thế nào Safari thay đổi định dạng ngày khi đặt thuộc tính giá trị của đầu vào.

Chỉnh sửa: Tôi phát hiện định dạng ngày giờ là định dạng ngày giờ phổ quát (yyyy-MM-DDTHH:mmZ), trong khi định dạng ngày là yyyy-MM-dd. Có lẽ trình xác thực phía máy khách không hiểu được datetime phổ quát và không phải là yyyy-MM-dd do bản địa hóa.

+0

Vui lòng cung cấp ví dụ đầu vào cho 'B' làm tăng lỗi" vui lòng nhập ngày hợp lệ "nhưng bạn coi là hợp lệ. – phoog

+0

@ Guillaume đã bị xóa nhận xét: đó là HTML hợp lệ, nhưng thực sự không được xử lý bởi mọi trình duyệt. Vì iPad hỗ trợ các kiểu đầu vào này, tôi chỉ sử dụng nó trong chế độ xem iPad. Đối với các trình duyệt thông thường, tôi sử dụng bộ chọn thời gian datetime của jQuery. – Marthijn

+0

type = "date" là mới trong HTML5. Loại tài liệu của bạn là gì? http://dev.w3.org/html5/markup/input.html – Guillaume

Trả lời

4

Tôi đã có cùng một vấn đề chính xác và buồn bã ngoài niềm tin khi xem trang web trên điện thoại di động mà tôi đang phát triển trên iPhone của mình. Các cuộc thảo luận trong vấn đề dưới đây giải quyết nó cho tôi.

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

Ngoài ra, để đi xa với điều này theo một cách liền mạch, tôi tạo ra các mẫu sau đây dao cạo biên tập viên cho các kiểu dữ liệu ngày:

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

và một phương pháp mở rộng tiện dụng để nuôi html 5 ngày kiểu đầu vào một định dạng mà nó thích làm việc theo theo số spec for input type=date:

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

    return d.Value.ToString("yyyy-MM-dd"); 
} 
Các vấn đề liên quan