Question

Existe-t-il un moyen de faire en sorte qu'une zone de texte ASP.NET accepte uniquement les valeurs monétaires et, lorsque le contrôle est validé, insère un signe $ auparavant?

Exemples:

10.23 devient 10.23 $
1,45 $ reste 1,45 $
10.a déclenche une erreur car ce n'est pas un nombre valide

J'ai un RegularExpressionValidator qui vérifie que le numéro est valide, mais je ne sais pas comment forcer le signe $ dans le texte. Je suppose que JavaScript pourrait fonctionner, mais je me demandais s’il existait un autre moyen de le faire.

Était-ce utile?

La solution

Le contrôle MaskedEdit d'ASP.NET à partir du AJAX Control Toolkit peut accomplir ce que vous demandez.

Autres conseils

Je sais qu'une réponse a déjà été acceptée, mais je voulais proposer une autre solution à toute personne confrontée au même problème et recherchant plusieurs solutions de contournement.

Pour ce faire, jQuery est plug-in de devise au format pour être lié. entrée utilisateur côté client. L'analyse de cette entrée côté serveur nécessite uniquement:

// directive
using System.Globalization;

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

Le seul inconvénient, c’est que l’utilisateur peut avoir javascript désactivé, auquel cas le validateur RegEx fonctionnant côté serveur fonctionnerait comme solution de secours. Si le contrôle est lié à la donnée, il vous suffit de decimalValue.ToString ("{0: c}") , comme mentionné par d'autres, afin d'afficher le format de devise approprié.

La chose intéressante à propos de cela est que si l'utilisateur entre dans la zone de texte et qu'il affiche $ 0,00 du côté client, l'instruction côté serveur si renverrait false. Si votre valeur décimale ne peut pas être annulée dans la base de données, remplacez simplement entrée décimale = -1 par entrée décimale = 0 et vous aurez une valeur par défaut de 0.

Une autre solution consiste à placer le signe dollar à l'extérieur de la zone de texte. Y at-il un besoin réel d’avoir le signe dollar à l’intérieur de la boîte ou une simple étiquette suffira-t-elle?

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); }

Dans le fichier .CS, vous pouvez créer une correspondance de motif sur le modèle 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})<*>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
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top