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)