2016-12-24 25 views
7

Tôi muốn tạo một biểu mẫu ASP.Net đơn giản, sẽ có ngày sinh. Tôi có một mô hình với khách sạn này:Đăng ngày giờ hợp lệ từ bất kỳ nơi nào

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

và theo quan điểm của tôi (đang sử dụng datepicker):

@Html.LabelFor(model => model.BirthDate) 
@Html.TextBoxFor(model => model.BirthDate, new { @class = "form-control date-picker" }) 
@Html.ValidationMessageFor(model => model.BirthDate, "", new { @class = "text-danger" }) 

duy nhất thiết lập trên datepicker javascript tôi một là:

format: 'L' 

bởi vì tôi muốn hiển thị ngày mà không có thời gian.

Bây giờ, tôi không thể lưu, vì lỗi xác nhận:

The value '12/23/2000' is not valid for BirthDate.

Bây giờ, tôi biết, một lỗi toàn cầu hóa của nó ... tôi cần thiết lập văn hóa trong <globalization> phần tử trong web.config, vv ... Nhưng, bạn có nhận thấy tôi không đặt định dạng (ngoại trừ định dạng ngày tháng "L") không? Tôi muốn biểu mẫu đó nhận ngày sinh từ những người ở bất kỳ quốc gia nào, không có văn hóa/định dạng cụ thể, v.v.

Điều này có thể? Tôi làm nó như thế nào?

Edit:

  • mà bảng chọn ngày là u sử dụng?
    Trình JQuery, nhưng đây không phải là một điều kiện tiên quyết, tôi có thể thay đổi thành bất kỳ trình ghi ngày tháng nào có thể dễ dàng xử lý các định dạng lưu khác nhau "yyyy-mm-dd" và định dạng hiển thị.
  • Máy chủ của bạn có vị trí nào và định dạng nào bạn thích làm việc bên trong mã MVC của bạn và tồn tại trong cơ sở dữ liệu?
    Tôi không biết khách hàng của mình sẽ lưu trữ trang web, AWS ở đâu ... Tôi thích làm việc với chúng tôi hơn.
+2

Sau đó, sử dụng định dạng 'yyyy-MM-dd'. điều này được áp dụng trên toàn cầu và không thể có bất kỳ sự mơ hồ nào – Nkosi

+1

mà bộ chọn ngày đang sử dụng? nó không có vẻ là một JQueryUi? – Prasoon

+1

Máy chủ của bạn nằm ở vị trí nào và định dạng nào bạn thích làm việc trong mã MVC của bạn và tồn tại trong cơ sở dữ liệu? Có thể là điều này [Toàn cầu hóa jQuery Plugin từ blog của ScottGu] (https://weblogs.asp.net/scottgu/jquery-globalization-plugin-from-microsoft) có thể giúp bạn. –

Trả lời

9

Giả sử rằng datepicker của bạn có thể trả về ngày đã chọn trong đối tượng js Date(). Tôi sẽ đề nghị chuyển đổi giá trị ngày sang định dạng chuẩn như ISO8601. Vì vậy, những gì bạn phải làm là gắn một sự kiện onChange vào bộ chọn ngày và chuyển đổi giá trị Date() đã chọn thành định dạng ISO8601. Bạn có thể gán giá trị được chuyển đổi này cho một trường ẩn (chỉ đơn giản là date.toISOString()).

Trình phân tích cú pháp mạng MVC cũng hiểu định dạng ISO8601 do đó khi dữ liệu biểu mẫu của bạn được đăng trên máy chủ, nó được phân tích cú pháp để sửa giá trị ngày. Xem thêm this question.

Tôi đã tạo một jsfiddle bằng cách sử dụng jquery UI datepicker. Nó sử dụng altFormat và altField có thể được sử dụng cho định dạng ngày nội bộ bất kể định dạng ngày nào được hiển thị cho người dùng trong trường nhập ngày thực tế.

Tìm jsfiddle đây - https://jsfiddle.net/Prasoon1983/kyjvwkLd/2/

$("#dob").datepicker({ 
 
altFormat: "yy-mm-dd", 
 
altfield:"#dobInternal" 
 
}); 
 
$("#dob").datepicker("option", "altField", "#dobInternal");
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script> 
 
<input type="text" id="dob" /> 
 
<input type="text" id="dobInternal" />

Tôi đã sử dụng một điều khiển đầu vào cho mục đích trưng bày nhưng bạn có thể sử dụng một đầu vào ẩn.

Hy vọng điều đó sẽ hữu ích.

1

Hãy sở hữu của bạn như sau

[RegularExpression(@"(\d{2}|\d{1})[/](\d{2}|\d{1})[/]\d{4}",ErrorMessage ="Birthday field must be ad dd/mm/yyyy format.")] 
public DateTime? BirthDate{ get; set; } 

Trên regex chỉ cho dd/mm/yyyy format.If bạn cần lựa chọn thay thế bạn phải thêm dấu hiệu cho thấy trong [/].

Loại bất động sản ngày sinh của ViewModel có thể chuỗi now.You có thể chuyển nó sang DateTime khi bạn cần

1

Toàn cầu hóa thực sự là khó khăn. Nhưng nếu bạn chuyển tiếp trên Javascrip thì bạn có thể hiển thị ngày đã chọn ở một định dạng và gửi nó đến máy chủ bằng cách sử dụng một định dạng khác, ví dụ: Tiêu chuẩn ISO.

Về phía máy chủ, tôi sẽ chuẩn bị trình xác thực hợp lệ - ví dụ: chỉ chấp nhận ngày ở định dạng ISO. Khi bạn nhận được yêu cầu với một số đầu vào lạ sau đó trả lời với lỗi (với thông điệp thích hợp).

Các vấn đề liên quan