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.

È stato utile?

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
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top