7

Pracuję nad aplikacją MVC2.oddzielne numery przecinkiem z asp.net mvc

Używam adnotacji danych do sprawdzania poprawności danych (zarówno po stronie klienta, jak i po stronie serwera). Mam kilka pól w moim modelu, które zezwalają tylko na wartości dziesiętne. Gdy użytkownik wpisze wartości dziesiętne, chcę, aby był on konwertowany na bardziej czytelny format oddzielony przecinkami. Na przykład 1200 powinno być sformatowane do 1200, a 500 powinno pozostać bez zmian.

Oto mój model:

public virtual GrossFee? Fee { get; set; } 

A oto jak to jest na widoku:

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

Wszelkie pomysły dotyczące tego będą bardzo mile widziane.

Dzięki!

+1

Aby uzyskać czystą stronę po stronie klienta tej odpowiedzi: http://stackoverflow.com/questions/1990512/add-comma-to-numbers-every-three-digits-using-jquery –

Odpowiedz

9

Zamiast Html.TextBoxFor można użyć Html.EditorFor i mają widok respektować adnotacji danych tak:

modelu:

(Nie wiem, co to jest GrossFee?, ale pozwala zakładać jego dziesiętne)

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

Widok:

Html.EditorFor(model => model.GrossFee) 

Możesz także muszą dostosować HtmlEncode i ApplyFormatInEditMode do własnych konkretnego zastosowania.

Wszystko, co przekształci zawartość pola tekstowego w numery w przecinkach, zaraz po ich wprowadzeniu (tj. Przed powrotem), musi być oparte na javascript.

+0

Bardzo dziękuję za sugestię. Próbowałem, jak wspomniałeś, i wyświetla wartość Opłaty brutto tak, jak chcę. [DisplayFormat (DataFormatString = "{0: 0,0}", ApplyFormatInEditMode = true, HtmlEncode = true)] public decimal GrossFee {get; zestaw; } Ale gdy formularz jest zwrócony do siebie, ModelState.IsValid jest fałszywa i narzeka, że ​​wartość opłaty brutto nie jest poprawna. BTW Mam sprawdzanie poprawności strony klienta do true i mam kontrolę ValidateMessageFor dla każdego pola. Dzięki za tonę. – user629161

+0

Jest tak prawdopodobnie dlatego, że wartości zawierają teraz przecinki, a walidator oczekuje liczby prostej.Jeśli przecinek jest ważny, musisz rozważyć niestandardowe weryfikatory lub usunąć je przed wysłaniem w formularzu. –

+2

Oto "oficjalne" rozwiązanie polegające na modelowaniu ułamków dziesiętnych za pomocą przecinków. http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx – Ryan

0

powinien być w stanie użyć Format ciągu toString

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

Chcę, aby to zrobić dynamicznie po stronie klienta, jak gdyby Wprowadzam 1200 w tekście i gdy tylko pole tekstowe straci ostrość, powinien sformatować ciąg znaków "#, ###. ##". – user629161

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

nadzieja ta może pomóc

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

Zamiast powyższej linii, jeśli chcesz wyświetlić wartość liczbową z przecinkiem, następujący kod pomoże wam-

String Test = String.Format("{0:#,#.##}",decValue); 
drPastDateDetail[strMS]=Test;