2011-03-28 24 views
7

Sto lavorando su un'appicazione MVC2.numeri separati da virgola con asp.net mvc

Uso le annotazioni di dati per convalidare i dati (lato client e lato server). Ho diversi campi nel mio modello che consentono solo valori decimali. Non appena un utente digita i valori decimali, voglio che sia convertito in formato separato da virgole più leggibile. Ad esempio 1200 dovrebbe essere formattato a 1.200 mentre 500 dovrebbe rimanere così com'è.

Ecco il mio modello:

public virtual GrossFee? Fee { get; set; } 

Ed ecco come è sulla vista:

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

Tutte le idee per quanto riguarda questo sarà molto apprezzato.

Grazie!

+1

Per il checkout lato cliente questa risposta: http://stackoverflow.com/questions/1990512/add-comma-to-numbers-every-three-digits-using-jquery –

risposta

9

Al posto del Html.TextBoxFor è possibile utilizzare il Html.EditorFor e hanno la vista rispettare le annotazioni di dati in questo modo:

Modello:

(non so che cosa sia GrossFee? ma si assume un decimale)

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

Vista:

Html.EditorFor(model => model.GrossFee) 

Si può anche avere bisogno di modificare il HtmlEncode e ApplyFormatInEditMode per soddisfare la vostra applicazione particolare.

Qualsiasi cosa che converta il contenuto della casella di testo in numeri raggruppati in virgola non appena immesso (ad esempio prima del post) deve essere basato su javascript.

+0

Grazie mille per il tuo suggerimento. Ho provato come hai detto tu e mostra il valore di Gross Fee nel modo in cui voglio. [DisplayFormat (DataFormatString = "{0: 0,0}", ApplyFormatInEditMode = true, HtmlEncode = true)] decimale pubblico GrossFee {get; impostato; } Ma quando il modulo viene restituito a se stesso, ModelState.IsValid è falso e si lamenta che il valore della commissione lorda non è nel formato corretto. BTW Ho la validazione lato client impostata su true e ho un controllo ValidateMessageFor per ogni campo. Grazie mille. – user629161

+0

Ciò è probabilmente dovuto al fatto che i valori ora contengono virgole e il tuo validatore si aspetta un numero dritto.Se la virgola è importante, è necessario considerare i validatori personalizzati o eliminarli prima di inviarli nel modulo. –

+2

Ecco la soluzione "ufficiale" per modellare i decimali di associazione con virgole. http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx – Ryan

0

Si dovrebbe essere in grado di utilizzare un formato all'interno tostring

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

Voglio che lo faccia dinamicamente sul lato client come se Inserisco 1200 nel testo box e non appena la casella di testo perde lo stato attivo, dovrebbe formattare la stringa su "#, ###. ##". – user629161

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

speranza questo può aiutare a

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

Invece della linea di cui sopra, se si desidera visualizzare il valore numerico con una virgola, il seguente codice contribuirà a te-

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