2011-11-12 15 views
10

Ngôn ngữ của tôi sử dụng dấu phẩy , và không phải là dấu chấm . cho dấu phân cách thập phân.Chỉnh sửa MVC3 cho các trường thập phân và nội địa hóa

Trong MVC3, khi tôi mở một cái nhìn Sửa nơi các giá trị thập phân được hiển thị với

@Html.EditorFor(model => model.MyDecimalVal) 

giá trị được hiển thị một cách chính xác.

Khi tôi nhập giá trị bằng dấu phẩy, tôi gặp lỗi "Giá trị không phải là số" và nếu tôi nhập giá trị bằng dấu chấm, tôi sẽ không gặp lỗi, nhưng thực sự không có giá trị nào được lưu.

Làm cách nào để xử lý tình huống này?

Trả lời

6

Bắt xung quanh với điều này bằng cách tinh chỉnh logic xác nhận của bạn đã được đã giải thích vì vậy đây là một cách tiếp cận khác nhau.

Đặt mã bên dưới vào tệp web.config của bạn dưới nút <system.web> nếu bạn muốn đặt văn hóa thành en. Nó sẽ chăm sóc delimiter thập phân:

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

Tôi không chắc chắn nhưng đối với DateTime, bạn vẫn bị ràng buộc vào miền địa phương của máy chủ.

+1

Cảm ơn, điều này đã chăm sóc cả hai định dạng datetime và số (nhưng buộc chúng cho en locale) – bzamfir

+1

@bzamfir đúng. Những gì tôi gọi phương pháp này là một sửa chữa tạm thời. Bản sửa lỗi cố định sẽ định cấu hình ngôn ngữ máy chủ của bạn. – tugberk

+4

Làm thế nào trên thế giới này là một giải pháp - buộc văn hóa sang tiếng Anh? – gangelo

16

This blog post khuyến nghị ghi đè số quy tắc và phạm vi xác thực jQuery mặc định để bật hỗ trợ phía máy khách của dấu phân tách thập phân.

Để khắc phục những sự cố này, chúng tôi có thể thực hiện mặc định từ tệp jquery.validate.js cho các hàm range() và number(). Chúng tôi sau đó tạo tệp .js khác (giả sử jQueryFixes.js), trong đó chúng tôi ghi đè các hàm mặc định này với các hàm có chứa hỗ trợ cho dấu phẩy là dấu phẩy thập phân. Nội dung của tập tin cần được một cái gì đó như thế này:

$.validator.methods.range = function (value, element, param) { 
    var globalizedValue = value.replace(",", "."); 
    return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]); 
} 

$.validator.methods.number = function (value, element) { 
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:[\s\.,]\d{3})+)(?:[\.,]\d+)?$/.test(value); 
} 
+0

Có cách nào phù hợp để thực hiện việc này không? –

+0

Ý tôi là, việc xử lý các giá trị thập phân khác nhau trong các nền văn hóa khác nhau thì sao? Của couse tôi chỉ muốn lưu trữ các giá trị trong một nền văn hóa nhưng tôi muốn cung cấp cho khách truy cập của trang web cơ hội để đưa vào và xác nhận giá trị thập phân trong văn hóa của mình. –