Forțați caseta text ASP.NET pentru a afișa moneda cu semnul $

Există o modalitate de a obține o casetă text ASP.NET pentru a accepta numai valori valutare, iar atunci când controlul este validat, introduceți semnul $ în prealabil?

Exemple:

10.23 devine $ 10.23
1,45 dolari rămâne 1,45 dolari
10.a ridică erori din cauza faptului că nu este un număr valid

Am un RegularExpressionValidator care verifică dacă numărul este valabil, dar nu știu cum să forțez semnul $ în text. Bănuiesc că JavaScript ar putea funcționa, dar se întreba dacă există un alt mod de a face acest lucru.

3
Am ajuns să găsesc niște JavaScript pentru a face ceea ce vroiam. Necesarul de simplificare a unui pachet de implementare și setul de instrumente AJAX au fost doar o altă dependență.
adăugat autor Jason Z, sursa

5 răspunsuri

Controlul ASP.NET MaskedEdit din Instrumentul de control AJAX poate realiza ceea ce cereți.

9
adăugat
Mesajul MaskedEdit este întrerupt.
adăugat autor Neil Knight, sursa
Ce vot în jos?
adăugat autor Neil Knight, sursa
@NeilKnight - O scădere pentru un link de aproape 5 ani vechi rupt? Asta e dur, nu crezi? Link-urile sunt fixate acum, dar tu (cineva care a fost în comunitate de peste 3 ani) ar fi putut ajuta la remedierea unei legături întrerupte.
adăugat autor Forgotten Semicolon, sursa

Știu că un răspuns a fost deja acceptat, dar am vrut să arunc o altă soluție pentru oricine cu aceeași problemă și căutând mai multe soluții.

Modul în care fac acest lucru este să utilizați jQuery plugin valutar format pentru a lega intrarea utilizatorului pe partea clientului. Parsarea acestei intrări pe partea de server necesită numai:

// directive
using System.Globalization;

// code
decimal input = -1;
if (decimal.TryParse(txtUserInput.Text, NumberStyles.Currency, 
    CultureInfo.InvariantCulture, out input))
{
    parameter = input.ToString();
}

Singura cădere la acest lucru este faptul că utilizatorul poate avea JavaScript dezactivat, caz în care validatorul RegEx care rulează pe partea de server va funcționa ca o scădere înapoi. Dacă controlul este bazat pe date, tot ceea ce trebuie să faceți este decimalValue.ToString ("{0: c}") , așa cum a fost menționat de alții, pentru a afișa formatul corespunzător valutei.

Lucrul interesant este că dacă utilizatorul introduce câmpul text și arată $ 0.00 pe partea clientului, declarația if-if din partea serverului ar reveni false. Dacă valoarea zecimală nu este nullabilă în baza de date, trebuie doar să schimbați decimal input = -1 la decimal input = 0 și veți avea o valoare implicită de 0.

5
adăugat
Lucru sigur! Este foarte util.
adăugat autor Jim Schubert, sursa

O altă modalitate de a face acest lucru ar putea fi să plasați semnul dolarului afară în stânga casetei de text. Există o nevoie reală de a avea semnul dolarului în interiorul cutiei sau o simplă etichetă face?

4
adăugat
Nu există o nevoie reală pentru aceasta, sunt nefericit legată de cerințele de vânzări și marketing. Am încercat să mă opun, dar a fost respinsă.
adăugat autor Jason Z, sursa
O soluție plăcută care se gândește în afara casetei! Nu puteam rezista ...
adăugat autor Brian Hinchey, sursa
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); }
2
adăugat
string.Format ("{0: c}", sValue) este o soluție plăcută când trebuie să plasați uneori valoarea într-o etichetă și o altă casetă de text.
adăugat autor Tony L., sursa

În .CS ai putea să faci o potrivire a modelului în funcție de,

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})$";
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
}
0
adăugat
Deja rulează acel regex. Vreau ca semnul $ să fie introdus în valoarea casetei după introducerea valorii, de preferință fără postback.
adăugat autor Jason Z, sursa