Pregunta

¿Hay alguna forma de que un cuadro de texto ASP.NET acepte solo valores de moneda y, cuando se valide el control, inserte un signo de $ de antemano?

Ejemplos:

10.23 se convierte en $ 10.23
$ 1.45 se queda $ 1.45
10.a genera un error debido a que no es un número válido

Tengo un RegularExpressionValidator que está verificando que el número es válido, pero no sé cómo forzar el signo $ en el texto. Sospecho que JavaScript podría funcionar, pero me preguntaba si había otra forma de hacerlo.

¿Fue útil?

Solución

El ASP.NET MaskedEdit del control AJAX Control Toolkit puede lograr lo que está pidiendo.

Otros consejos

Sé que ya se ha aceptado una respuesta, pero quería lanzar otra solución para cualquier persona con el mismo problema y buscando soluciones alternativas.

La forma en que lo hago es usar jQuery complemento de formato de moneda para enlazar entrada de usuario en el lado del cliente. El análisis de esta entrada en el servidor solo requiere:

// directive
using System.Globalization;

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

El único inconveniente de esto es que el usuario puede tener desactivado el javascript, en cuyo caso el validador RegEx que se ejecuta en el lado del servidor funcionaría como una alternativa. Si el control es un enlace de datos, todo lo que tiene que hacer es decimalValue.ToString (" {0: c} ") , como lo mencionaron otros, para mostrar el formato de moneda adecuado.

Lo bueno de esto es que si el usuario ingresa en el cuadro de texto y muestra $ 0.00 en el lado del cliente, la declaración del lado del servidor si devuelve falso. Si su valor decimal no es anulable en la base de datos, simplemente cambie decimal input = -1 a decimal input = 0 y tendrá un valor predeterminado de 0.

Otra forma de hacer esto podría ser colocar el signo de dólar afuera a la izquierda del cuadro de texto. ¿Hay una necesidad real de tener el signo de dólar dentro de la caja o lo hará una etiqueta simple?

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

En el .CS puedes hacer una coincidencia de patrón a lo largo de las líneas 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
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top