Fuerza el cuadro de texto ASP.NET para mostrar la moneda con el signo $

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

Ejemplos:

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

Tengo un RegularExpressionValidator que verifica que el número sea 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.

3
Terminé descifrando algo de JavaScript para hacer lo que quería. Necesario para simplificar un paquete de implementación y el kit de herramientas AJAX era solo otra dependencia.
agregado el autor Jason Z, fuente

5 Respuestas

El MaskedEdit control de ASP.NET desde AJAX Control Toolkit puede lograr lo que está solicitando.

9
agregado
El enlace MaskedEdit está roto.
agregado el autor Neil Knight, fuente
¿Qué voto abajo?
agregado el autor Neil Knight, fuente
@NeilKnight - ¿Un voto a favor de un vínculo roto de casi 5 años? Eso es duro, ¿no crees? Los enlaces están arreglados ahora, pero usted (alguien que ha estado en la comunidad por más de 3 años) podría haber ayudado a arreglar un enlace roto.
agregado el autor Forgotten Semicolon, fuente

Sé que ya se aceptó una respuesta, pero quería arrojar otra solución para cualquiera con el mismo problema y buscar soluciones múltiples.

La forma en que hago esto es utilizar jQuery formato de complemento de moneda para vincular la entrada del 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();
}

La única desventaja de esto es que el usuario puede tener JavaScript desactivado, en cuyo caso el validador de RegEx que se ejecuta en el servidor funcionaría como un retroceso. Si el control está enlazado a 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 al cuadro de texto y muestra $ 0.00 en el lado del cliente, la instrucción if del lado del servidor devolvería false. Si su valor decimal no puede contener nulos en la base de datos, simplemente cambie decimal input = -1 a decimal input = 0 y obtendrá un valor predeterminado de 0.

5
agregado
¡Cosa segura! Es muy útil.
agregado el autor Jim Schubert, fuente

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 una simple etiqueta?

4
agregado
No existe una necesidad real, estoy desafortunadamente atado a los requisitos de ventas y marketing. Traté de discutir en contra, pero fue invalidado.
agregado el autor Jason Z, fuente
¡Una buena solución que está pensando fuera de la caja! No pude resistir ...
agregado el autor Brian Hinchey, fuente
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
agregado
string.Format ("{0: c}", sValue) es una buena solución cuando necesita colocar el valor en una etiqueta a veces y en un cuadro de texto en otros momentos.
agregado el autor Tony L., fuente

En .CS podrías hacer una coincidencia de patrón en la línea 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
agregado
Ya está ejecutando esa expresión regular. Quiero que el signo $ se inserte en el valor del cuadro de texto una vez que se ingresa el valor, preferiblemente sin una devolución de datos.
agregado el autor Jason Z, fuente