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.

Foi útil?

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
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top