RangeValidator Il valore della valuta non può contenere più di 2 cifre dopo il decimale?

Applicazione Framework 4.0 Asp.net

Quando eseguo il codice ho ricevuto un errore “Il valore ‘999.9999’ della proprietà MaximumValue di ‘RangeValidator’ non può essere convertito in tipo ‘Valuta’.

Di seguito è riportato il mio codice:

 

Per favore, spiegami che il valore della valuta non può contenere più di 2 cifre dopo il decimale? A meno che non sia ansible risolvere questo problema?

RangeValidator utilizza la proprietà NumberFormatInfo.CurrencyDecimalDigits per determinare se la stringa può essere convertita in una valuta, altrimenti genererà l’eccezione. Da MSDN :

quando la proprietà Type di un controllo RangeValidator è impostata su “Currency”, le proprietà MinimumValue e MaximumValue devono essere fornite in un formato come quello descritto in NumberFormatInfo.CurrencyDecimalDigits, altrimenti viene generata un’eccezione .

Il valore predefinito per la maggior parte delle culture (incluso InvariantCulture ) è 2 (i paesi arabi hanno 3 ma nessuno 4).

Quindi quale cultura stai usando? Se è importante memorizzare più posizioni decimali di due in una valuta, è ansible utilizzare NumberFormatInfo personalizzato in questa pagina:

 protected void Page_PreInit(object sender, EventArgs e) { var customCulture = (CultureInfo)CultureInfo.CurrentCulture.Clone(); var nfi = (NumberFormatInfo)customCulture.NumberFormat.Clone(); nfi.CurrencyDecimalDigits = 4; customCulture.NumberFormat = nfi; System.Threading.Thread.CurrentThread.CurrentCulture = customCulture; } 

(notare che è necessario aggiungere using System.Globalization; in alto)