2013-08-31 28 views
17

Tôi đang sử dụng MVC 4 và đang tự hỏi liệu có lỗi trong thông tin văn hóa Ngày giờ không?MVC 4 vấn đề văn hóa ngày?

Tôi đang cố gắng để có được ngày làm việc Úc (dd/MM/yyyy), nhưng nó vẫn nói rằng định dạng ngày là sai, ngay cả sau khi puttig globalizaton vào web.config. Tôi nghĩ rằng đó là một lỗi với mã của tôi, nhưng ngay cả khi bạn bắt đầu một dự án mới nó vẫn xảy ra.

Tôi đã bắt đầu một ứng dụng web MVC 4 mới.

gia tăng sau vào file web.config

<globalization culture="en-AU" uiCulture="en-AU" /> 

Sau đó, tôi được thêm vào sau vào AccountModels.cs file:

[DataType(DataType.DateTime)] 
[Required(ErrorMessage="Date is required")] 
public DateTime? MyDate { get; set; } 

Sau đó, tôi được thêm vào sau vào Đăng ký .cshtml tệp:

<li> 
    @Html.LabelFor(m => m.MyDate) 
    @Html.TextBoxFor(m => m.MyDate) 
</li> 

Chạy ứng dụng, truy cập trang đăng ký, thử ngày 26/03/2013 và nó không phải là định dạng hợp lệ.

Vui lòng trợ giúp.

Trả lời

23

Hãy thử thêm thuộc tính này để sở hữu MyDate của bạn:

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 

Mặc dù thiết lập các nền văn hóa trong web.config nên làm điều đó, điều này sẽ buộc nó vào định dạng đó.

CẬP NHẬT

Ok, vậy câu trả lời ở trên không thực sự giải quyết vấn đề này, mặc dù điều quan trọng là nếu bạn muốn thay đổi định dạng của bao ngày được hiển thị ban đầu. Lưu ý quan trọng là thuộc tính DisplayFormat không được trình trợ giúp TextBoxFor thu thập mà là bởi trình trợ giúp EditorFor.

Dù sao, vào giải pháp thực. Vấn đề là việc xác nhận hợp lệ jQuery không tính đến văn hóa khi phân tích cú pháp ngày tháng. Nếu bạn tắt xác thực phía máy khách, ngày được phân tích cú pháp tốt trên máy chủ nhận biết về văn hóa.

Khắc phục là ghi đè xác thực jQuery cho đến nay và bao gồm một plugin toàn cầu hóa bổ sung của jQuery. Bạn có thể tìm thấy plugin toàn cầu hóa here. Bạn cũng có thể dễ dàng tải xuống plugin bằng Trình quản lý gói Nuget. Tôi vừa mở trình quản lý gói, chọn tab Trực tuyến ở bên trái và nhập "toàn cầu hóa" vào tìm kiếm và đó là kết quả đầu tiên. Một khi bạn đã cài đặt tôi bao gồm hai tập tin sau đây:

globalize.js
globalize.culture.en-AU.js

Bạn có thể bao gồm họ trực tiếp sử dụng một thẻ script hoặc đặt chúng trong một gói, có lẽ với các tệp xác thực jQuery khác.

Một khi bạn có những người bạn sẽ cần phải thêm đoạn mã sau đây để ghi đè lên xác nhận jQuery đối với ngày:

<script type="text/javascript"> 
    $(function() { 
     $.validator.methods.date = function (value, element) { 
      Globalize.culture("en-AU"); 
      // you can alternatively pass the culture to parseDate instead of 
      // setting the culture above, like so: 
      // parseDate(value, null, "en-AU") 
      return this.optional(element) || Globalize.parseDate(value) !== null; 
     } 
    }); 
</script> 

Và đó là nó, mà nên làm các trick. Tôi ghi nhận giải pháp này cho câu trả lời này: JQuery Validation and MVC 3. How to change date format Tôi cũng muốn cung cấp thêm một số giải thích cụ thể cho vấn đề của bạn.

+0

không hoạt động. Bạn có thể thử bằng cách tạo một dự án mới và làm theo các bước được không? Tôi đang điên rồ cố gắng để sắp xếp vấn đề này .. nó là một vấn đề với cài đặt của tôi? máy của tôi? Tôi đang sử dụng IIS Express, như tôi đang chạy nó trực tiếp từ vs2012 .. có thể đó là vấn đề? – user2206329

+0

đây là một liên kết đến dự án của tôi, nó chỉ là một dự án hoàn toàn mới với những thay đổi được đề cập ở trên .. https://dl.dropboxusercontent.com/u/87611366/MvcApplication2.zip – user2206329

+0

Tôi sẽ dùng thử tại địa phương và xem chuyện gì xảy ra Tôi không có nhiều kinh nghiệm với việc ứng dụng toàn cầu hóa hoặc thay đổi nền văn hóa nhưng điều này là tất cả những gì cần thiết. – asymptoticFault

0

Điều gì về việc tạo chức năng proxy?

var _date = $.validator.methods.date; 

$.validator.methods.date = function (value, element) { 
    return _date.call(this, Globalize.parseDate(value), element); 
}; 
1

Câu trả lời được chấp nhận không cập nhật. My giải pháp cuối cùng làm việc:

$(function() { 
    $.validator.methods.date = function (value, element) { 
     return this.optional(element) || moment(value, "DD.MM.YYYY", true).isValid(); 
    } 
}); 

Bạn phải bao gồm trước:

@Scripts.Render("~/Scripts/jquery-3.1.1.js") 
@Scripts.Render("~/Scripts/jquery.validate.min.js") 
@Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js") 
@Scripts.Render("~/Scripts/moment.js") 

Bạn có thể cài đặt moment.js sử dụng:

Install-Package Moment.js 
+0

Cảm ơn người đàn ông, cái này hoạt động với MVC5. Quá tệ không có tệp "standarized" nào cho MVC5 nữa ... – DoubleVoid

0

Trong bổ sung Thổ Nhĩ Kỳ Văn hóa đó là bên dưới.

<globalization 
fileencoding="utf-8" 
requestencoding="utf-8" 
responseencoding="utf-8" 
culture="tr-TR" 
uiculture="tr-TR"/> 
Các vấn đề liên quan