强制ASP.NET文本框以$符号显示货币

时间:2008-10-14 17:24:59

标签: asp.net formatting textbox currency

有没有办法让ASP.NET文本框只接受货币值,并且在验证控件时,事先插入$符号?

示例:

10.23成为10.23美元 1.45美元保留1.45美元 10.a由于不是有效数字而引起错误

我有一个正在验证号码有效的RegularExpressionValidator,但我不知道如何强制$符号进入文本。我怀疑JavaScript可能有用,但想知道是否还有其他方法可以做到这一点。

6 个答案:

答案 0 :(得分:10)

来自MaskedEdit的ASP.NET AJAX Control Toolkit控件可以完成您的要求。

答案 1 :(得分:5)

我知道答案已被接受,但我想为有相同问题并寻找多种解决方法的人抛弃另一种解决方案。

我这样做的方法是使用jQuery format currency plugin绑定客户端的用户输入。在服务器端解析此输入只需要:

// directive
using System.Globalization;

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

唯一的缺点就是用户可以关闭javascript,在这种情况下,运行服务器端的RegEx验证器可以作为后备。如果控件是数据绑定的,那么您需要做的只是其他人提到的decimalValue.ToString("{0:c}"),以便显示正确的货币格式。

这很酷的是,如果用户输入文本框并在客户端显示$0.00,则服务器端if语句将返回false。如果您的小数值在数据库中不可为空,只需将decimal input = -1更改为decimal input = 0,您的默认值为0.

答案 2 :(得分:4)

另一种方法可能是将美元符号放在文本框左侧。真的需要在盒子里面放一个美元符号,还是一个简单的标签呢?

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

在.CS中你可以按照

的方式进行模式匹配
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
}