textbox força ASP.NET para a moeda de exibição com sinal $
-
03-07-2019 - |
Pergunta
Existe uma maneira de obter uma caixa de texto ASP.NET para aceitar somente valores de moeda, e quando o controle é validado, insira um sinal $ antemão?
Exemplos:
10,23 torna-se $ 10,23
$ 1,45 estadias $ 1,45
10.a gera erro devido a não ser um número válido
Eu tenho um RegularExpressionValidator que está verificando o número é válido, mas eu não sei como forçar o sinal $ para o texto. Eu suspeito JavaScript trabalho poder, mas queria saber se havia uma outra maneira de fazer isso.
Solução
O controle ASP.NET MaskedEdit do AJAX Control Toolkit pode realizar o que você está pedindo.
Outras dicas
Eu sei que uma resposta já foi aceito, mas eu queria jogar fora outra solução para qualquer pessoa com o mesmo problema e procurando várias soluções alternativas.
A forma como eu fazer isso é usar jQuery formato de moeda plug-in para vincular entrada do usuário no lado do cliente. Analisando esta entrada no lado do servidor requer apenas:
// directive
using System.Globalization;
// code
decimal input = -1;
if (decimal.TryParse(txtUserInput.Text, NumberStyles.Currency,
CultureInfo.InvariantCulture, out input))
{
parameter = input.ToString();
}
A única queda para isso é que o usuário pode ter o javascript desligado, caso em que o validador RegEx correndo do lado do servidor iria funcionar como uma queda-back. Se o controle é databound, tudo que você tem a fazer é decimalValue.ToString("{0:c}")
, como mencionado por outros, a fim de mostrar a moeda formatação adequada.
A coisa legal sobre isso é que se o usuário entra na caixa de texto e mostra $0.00
no lado do cliente, a do lado do servidor if voltaria falsa. Se o seu valor decimal não é anulável no banco de dados, basta alterar decimal input = -1
para decimal input = 0
e você terá um valor padrão de 0.
Outra maneira de fazer isso poderia ser a de colocar o exterior cifrão à esquerda da caixa de texto. Existe uma necessidade real de ter o interior do sinal de dólar da caixa ou será uma etiqueta simples fazer?
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); }
Nos .cs você poderia fazer um jogo padrão ao longo das linhas 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
}