2011-03-28 44 views
7

Tôi đang nghiên cứu ứng dụng MVC2.số riêng biệt bằng dấu phẩy với asp.net mvc

Tôi sử dụng chú thích dữ liệu để xác thực dữ liệu (cả phía máy khách và phía máy chủ). Tôi có một số trường trong mô hình của tôi chỉ cho phép các giá trị thập phân. Ngay sau khi người dùng nhập một giá trị thập phân, tôi muốn nó được chuyển đổi thành dấu phẩy phân tách nhiều định dạng có thể đọc được hơn. Ví dụ 1200 nên được định dạng là 1.200 trong khi 500 nên ở lại như nó được.

Đây là mô hình của tôi:

public virtual GrossFee? Fee { get; set; } 

Và đây là cách nó là trên quan điểm:

%: Html.TextBoxFor(model => model.GrossFee)%> 

Bất kỳ ý tưởng về vấn đề này sẽ được đánh giá cao.

Cảm ơn!

+1

Đối với khách hàng tinh khiết thanh toán bên này câu trả lời: http://stackoverflow.com/questions/1990512/add-comma-to-numbers-every-three-digits-using-jquery –

Trả lời

9

Thay vì Html.TextBoxFor bạn có thể sử dụng Html.EditorFor và có giao diện tôn trọng các chú thích dữ liệu như thế này:

mẫu:

(Tôi không biết những gì GrossFee? là nhưng cho phép giả định một số thập phân của nó)

[DisplayFormat(DataFormatString = "{0:0,0}")] 
public virtual Decimal? Fee { get; set; } 

Xem:

Html.EditorFor(model => model.GrossFee) 

Bạn cũng có thể cần phải tinh chỉnh các HtmlEncode và ApplyFormatInEditMode cho phù hợp với ứng dụng cụ thể của bạn.

Bất kỳ nội dung nào chuyển đổi nội dung của hộp văn bản thành các số được phân nhóm bằng dấu phẩy ngay sau khi nhập (I.e. trước khi đăng lại) sẽ cần phải dựa trên javascript.

+0

Cảm ơn rất nhiều vì gợi ý của bạn. Tôi đã thử như bạn đã đề cập và nó hiển thị giá trị của Gross phí theo cách tôi muốn. [DisplayFormat (DataFormatString = "{0: 0,0}", ApplyFormatInEditMode = true, HtmlEncode = true)] số thập phân công khai GrossFee {get; bộ; } Nhưng khi biểu mẫu được trả về chính nó thì ModelState.IsValid là false và nó phàn nàn rằng giá trị của Gross khoản phí không đúng định dạng. BTW Tôi đã xác thực phía khách hàng được thiết lập là true và tôi có một điều khiển ValidateMessageFor cho mỗi trường. Cảm ơn một tấn. – user629161

+0

Điều này có thể do các giá trị hiện có dấu phẩy trong chúng và trình xác thực của bạn đang mong đợi một số thẳng.Nếu dấu phẩy là quan trọng thì bạn sẽ cần phải xem xét các trình duyệt tính hợp lệ tùy chỉnh hoặc loại bỏ chúng ra trước khi bạn gửi chúng trong bài đăng biểu mẫu. –

+2

Đây là giải pháp "chính thức" để mô hình các số thập phân liên kết bằng dấu phẩy. http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx – Ryan

0

Bạn sẽ có thể sử dụng một định dạng trong toString

var foo = 1200.2; 
var bob = foo.ToString("#,###.00##"); 
+0

Tôi muốn nó tự động làm việc ở phía khách hàng như thể Tôi nhập 1200 vào văn bản và ngay khi hộp văn bản mất tiêu điểm, nó sẽ định dạng chuỗi thành "#, ###. ##". – user629161

3
[DisplayFormat(DataFormatString = "{0:n}")] 
public virtual GrossFee? Fee { get; set; } 

hy vọng điều này có thể giúp bạn

4
drPastDateDetail[strMS] = decValue.ToString(); 

Thay vì dòng trên, nếu bạn muốn hiển thị các giá trị số với một dấu phẩy, đoạn code sau sẽ giúp em-

String Test = String.Format("{0:#,#.##}",decValue); 
drPastDateDetail[strMS]=Test; 
Các vấn đề liên quan