Forza la casella di testo ASP.NET per visualizzare la valuta con il segno $
-
03-07-2019 - |
Domanda
Esiste un modo per ottenere una casella di testo ASP.NET per accettare solo i valori di valuta e quando il controllo viene convalidato, inserire prima un segno $?
Esempi:
10.23 diventa $ 10,23
$ 1,45 soggiorni $ 1,45
10.a genera un errore perché non è un numero valido
Ho un RegularExpressionValidator che sta verificando che il numero sia valido, ma non so come forzare il segno $ nel testo. Sospetto che JavaScript potrebbe funzionare, ma mi chiedevo se ci fosse un altro modo per farlo.
Soluzione
ASP.NET MaskedEdit dal controllo AJAX Control Toolkit può realizzare ciò che stai chiedendo.
Altri suggerimenti
So che una risposta è già stata accettata, ma volevo lanciare un'altra soluzione per chiunque avesse lo stesso problema e cercasse più soluzioni alternative.
Il modo in cui lo faccio è utilizzare jQuery plugin valuta in formato per eseguire il bind input dell'utente sul lato client. L'analisi di questo input sul lato server richiede solo:
// directive
using System.Globalization;
// code
decimal input = -1;
if (decimal.TryParse(txtUserInput.Text, NumberStyles.Currency,
CultureInfo.InvariantCulture, out input))
{
parameter = input.ToString();
}
L'unico inconveniente è che l'utente può avere javascript disattivato, nel qual caso il validatore RegEx che esegue sul lato server funzionerebbe come un fall-back. Se il controllo è un database, tutto ciò che devi fare è decimalValue.ToString (" {0: c} ")
, come menzionato da altri, al fine di visualizzare la corretta formattazione della valuta.
Il bello di questo è che se l'utente entra nella casella di testo e mostra $ 0,00
sul lato client, l'istruzione if sul lato server restituisce false. Se il tuo valore decimale non è nulla nel database, modifica input decimale = -1
in input decimale = 0
e avrai un valore predefinito di 0.
Un altro modo per farlo potrebbe essere quello di posizionare il simbolo del dollaro all'esterno a sinistra della casella di testo. C'è davvero bisogno di avere il simbolo del dollaro all'interno della scatola o farà una semplice etichetta?
decimal sValue = decimal.Parse(txtboxValue.Text.Trim());
// Put Code to check whether the $ sign already exist or not.
//Try making a function returning boolean
//if Dollar sign not available do this
{ string LableText = string.Format("{0:c}", sValue); }
else
{ string LableText = Convert.ToString(sValue); }
string sValue = Convert.ToString(txtboxValue.Text.Trim());
// Put Code to check whether the $ sign already exist or not.
//Try making a function returning boolean
//if Dollar sign not available do this
{ string LableText = string.Format("{0:c}", "sValue"); }
else
{ string LableText = Convert.ToString(sValue); }
In .CS potresti fare una corrispondenza del modello lungo le linee di,
string value = text_box_to_validate.Text;
string myPattern = @"^\$(\d{1,3},?(\d{3},?)*\d{3}(\.\d{0,2})|\d{1,3}(\.\d{2})|\.\d{2})<*>quot;;
Regex r = new Regex(myPattern);
Match m = r.Match(value);
if (m.Success)
{
//do something -- everything passed
}
else
{
//did not match
//could check if number is good, but is just missing $ in front
}